mirror of
				https://github.com/pierre42100/ComunicAndroid
				synced 2025-11-04 11:34:06 +00:00 
			
		
		
		
	Added latest posts fragment
This commit is contained in:
		@@ -100,13 +100,33 @@ public class PostsHelper {
 | 
			
		||||
 | 
			
		||||
            //Get the list of posts and process it
 | 
			
		||||
            JSONArray posts = response.getJSONArray();
 | 
			
		||||
            PostsList list = new PostsList();
 | 
			
		||||
            return parse_json_posts_list(posts);
 | 
			
		||||
 | 
			
		||||
            for(int i = 0; i < posts.length(); i++){
 | 
			
		||||
                list.add(parse_json_post(posts.getJSONObject(i)));
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
            return list;
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of latest posts of a user
 | 
			
		||||
     *
 | 
			
		||||
     * @return The list of posts / null in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public PostsList get_latest() {
 | 
			
		||||
        //Perform a request on the API
 | 
			
		||||
        APIRequest params = new APIRequest(mContext, "posts/get_latest");
 | 
			
		||||
 | 
			
		||||
        //Perform the request
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            //Make the request on the API
 | 
			
		||||
            APIResponse response = new APIRequestHelper().exec(params);
 | 
			
		||||
 | 
			
		||||
            //Get the list of posts and process it
 | 
			
		||||
            JSONArray posts = response.getJSONArray();
 | 
			
		||||
            return parse_json_posts_list(posts);
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
@@ -255,11 +275,29 @@ public class PostsHelper {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Turn a JSONArray that contains information about posts into PostList object
 | 
			
		||||
     *
 | 
			
		||||
     * @param array The list of posts to process
 | 
			
		||||
     * @return The list of posts / null in case of failure
 | 
			
		||||
     * @throws JSONException in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    private PostsList parse_json_posts_list(JSONArray array) throws JSONException {
 | 
			
		||||
        PostsList list = new PostsList();
 | 
			
		||||
 | 
			
		||||
        for(int i = 0; i < array.length(); i++){
 | 
			
		||||
            list.add(parse_json_post(array.getJSONObject(i)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Parse a JSON post information into POST object
 | 
			
		||||
     *
 | 
			
		||||
     * @param json Source JSON post information
 | 
			
		||||
     * @return The created post element
 | 
			
		||||
     * @throws JSONException in case of failure
 | 
			
		||||
     */
 | 
			
		||||
    private Post parse_json_post(JSONObject json) throws JSONException {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ import org.communiquons.android.comunic.client.data.helpers.ConversationsListHel
 | 
			
		||||
import org.communiquons.android.comunic.client.data.runnables.FriendRefreshLoopRunnable;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.services.NotificationsService;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.utils.PreferencesUtils;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.fragments.LatestPostsFragment;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.fragments.SinglePostFragment;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.fragments.UserAccessDeniedFragment;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.listeners.onOpenUsersPageListener;
 | 
			
		||||
@@ -183,6 +184,12 @@ public class MainActivity extends AppCompatActivity implements openConversationL
 | 
			
		||||
        //Get action id
 | 
			
		||||
        int id = item.getItemId();
 | 
			
		||||
 | 
			
		||||
        //To display the personal page of the user
 | 
			
		||||
        if(id == R.id.action_open_user_page){
 | 
			
		||||
            openUserPage(AccountUtils.getID(MainActivity.this));
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //To display the list of friends
 | 
			
		||||
        if(id == R.id.action_friends_list){
 | 
			
		||||
            openFriendsFragment();
 | 
			
		||||
@@ -236,11 +243,12 @@ public class MainActivity extends AppCompatActivity implements openConversationL
 | 
			
		||||
                    //If the user chose to show information about him
 | 
			
		||||
                    case R.id.main_bottom_navigation_me_view:
 | 
			
		||||
 | 
			
		||||
                        //Old version
 | 
			
		||||
                        //Old versions
 | 
			
		||||
                        //openUserInfosFragment();
 | 
			
		||||
                        //openUserPage(AccountUtils.getID(MainActivity.this));
 | 
			
		||||
 | 
			
		||||
                        //New version
 | 
			
		||||
                        openUserPage(AccountUtils.getID(MainActivity.this));
 | 
			
		||||
                        openLatestPostsFragment();
 | 
			
		||||
                        return true;
 | 
			
		||||
 | 
			
		||||
                    //If the user wants to switch to the conversation fragment
 | 
			
		||||
@@ -503,6 +511,21 @@ public class MainActivity extends AppCompatActivity implements openConversationL
 | 
			
		||||
        transaction.commit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Open latest posts fragment
 | 
			
		||||
     */
 | 
			
		||||
    public void openLatestPostsFragment(){
 | 
			
		||||
 | 
			
		||||
        //Create the fragment
 | 
			
		||||
        LatestPostsFragment latestPostsFragment = new LatestPostsFragment();
 | 
			
		||||
 | 
			
		||||
        //Perform the transaction
 | 
			
		||||
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
 | 
			
		||||
        transaction.replace(R.id.main_fragment, latestPostsFragment);
 | 
			
		||||
        transaction.addToBackStack(null);
 | 
			
		||||
        transaction.commit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Clear the cache database of the application
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,200 @@
 | 
			
		||||
package org.communiquons.android.comunic.client.ui.fragments;
 | 
			
		||||
 | 
			
		||||
import android.app.Fragment;
 | 
			
		||||
import android.app.FragmentTransaction;
 | 
			
		||||
import android.os.AsyncTask;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.support.annotation.Nullable;
 | 
			
		||||
import android.util.ArrayMap;
 | 
			
		||||
import android.view.LayoutInflater;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
import android.widget.ProgressBar;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import org.communiquons.android.comunic.client.R;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.GetUsersHelper;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
 | 
			
		||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
 | 
			
		||||
import org.communiquons.android.comunic.client.ui.activities.MainActivity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Latest posts fragment
 | 
			
		||||
 *
 | 
			
		||||
 * @author Pierre HUBERT
 | 
			
		||||
 * Created by pierre on 5/10/18.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class LatestPostsFragment extends Fragment {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Debug tag
 | 
			
		||||
     */
 | 
			
		||||
    private static final String TAG = "LatestPostsFragment";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Posts helper
 | 
			
		||||
     */
 | 
			
		||||
    PostsHelper mPostsHelper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * User information helper
 | 
			
		||||
     */
 | 
			
		||||
    GetUsersHelper mUserHelper;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The list of posts
 | 
			
		||||
     */
 | 
			
		||||
    PostsList mPostsList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Information about the related users
 | 
			
		||||
     */
 | 
			
		||||
    ArrayMap<Integer, UserInfo> mUserInfo;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Loading progress bar
 | 
			
		||||
     */
 | 
			
		||||
    ProgressBar mProgressBar;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * No posts notice
 | 
			
		||||
     */
 | 
			
		||||
    TextView mNoPostNotice;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onStart() {
 | 
			
		||||
        super.onStart();
 | 
			
		||||
 | 
			
		||||
        //Create posts helper
 | 
			
		||||
        mPostsHelper = new PostsHelper(getActivity());
 | 
			
		||||
 | 
			
		||||
        //Create user helper
 | 
			
		||||
        mUserHelper = new GetUsersHelper(getActivity());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nullable
 | 
			
		||||
    @Override
 | 
			
		||||
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
 | 
			
		||||
        return inflater.inflate(R.layout.fragment_latest_posts, container, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
 | 
			
		||||
        super.onViewCreated(view, savedInstanceState);
 | 
			
		||||
 | 
			
		||||
        //Get some of the views
 | 
			
		||||
        mProgressBar = view.findViewById(R.id.loading_progress);
 | 
			
		||||
        mNoPostNotice = view.findViewById(R.id.no_post_notice);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onResume() {
 | 
			
		||||
        super.onResume();
 | 
			
		||||
 | 
			
		||||
        //Update dock and activity title
 | 
			
		||||
        getActivity().setTitle(R.string.fragment_latestposts_title);
 | 
			
		||||
 | 
			
		||||
        //Update the bottom navigation menu
 | 
			
		||||
        ((MainActivity) getActivity())
 | 
			
		||||
                .setSelectedNavigationItem(R.id.main_bottom_navigation_me_view);
 | 
			
		||||
 | 
			
		||||
        //Refresh the list of posts of the user
 | 
			
		||||
        refresh_posts_list();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Refresh the list of posts of the user
 | 
			
		||||
     */
 | 
			
		||||
    private void refresh_posts_list(){
 | 
			
		||||
 | 
			
		||||
        //Show progress bar / hide no posts notice
 | 
			
		||||
        toggleLoadingBarVisibility(true);
 | 
			
		||||
        toggleNoPostNoticeVisibility(false);
 | 
			
		||||
 | 
			
		||||
        //Get the list of latest posts
 | 
			
		||||
        new AsyncTask<Void, Void, PostsList>(){
 | 
			
		||||
            @Override
 | 
			
		||||
            protected PostsList doInBackground(Void... params) {
 | 
			
		||||
                PostsList postsList =  mPostsHelper.get_latest();
 | 
			
		||||
 | 
			
		||||
                //Get user information, if possible
 | 
			
		||||
                if(postsList != null)
 | 
			
		||||
                    mUserInfo = mUserHelper.getMultiple(postsList.getUsersId());
 | 
			
		||||
 | 
			
		||||
                return postsList;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            protected void onPostExecute(PostsList posts) {
 | 
			
		||||
 | 
			
		||||
                //Check if the activity still exists or not
 | 
			
		||||
                if(getActivity() == null)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                on_got_new_posts_list(posts);
 | 
			
		||||
            }
 | 
			
		||||
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This function is called when we have got a new post list
 | 
			
		||||
     *
 | 
			
		||||
     * @param list The new list of posts
 | 
			
		||||
     */
 | 
			
		||||
    private void on_got_new_posts_list(@Nullable PostsList list){
 | 
			
		||||
 | 
			
		||||
        //Hide loading bar
 | 
			
		||||
        toggleLoadingBarVisibility(false);
 | 
			
		||||
 | 
			
		||||
        //Check for errors
 | 
			
		||||
        if(list == null){
 | 
			
		||||
            Toast.makeText(getActivity(), R.string.err_get_latest_posts, Toast.LENGTH_SHORT).show();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if(mUserInfo == null){
 | 
			
		||||
            Toast.makeText(getActivity(), R.string.err_get_users_info, Toast.LENGTH_SHORT).show();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Save the list of posts
 | 
			
		||||
        mPostsList = list;
 | 
			
		||||
 | 
			
		||||
        //Check if the posts list is empty
 | 
			
		||||
        if(mPostsList.size() == 0)
 | 
			
		||||
            toggleNoPostNoticeVisibility(true);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //Append the new posts list
 | 
			
		||||
        //Apply the post fragment
 | 
			
		||||
        PostsListFragment postsListFragment = new PostsListFragment();
 | 
			
		||||
        postsListFragment.setPostsList(mPostsList);
 | 
			
		||||
        postsListFragment.setUsersInfos(mUserInfo);
 | 
			
		||||
 | 
			
		||||
        //Create and commit a transaction
 | 
			
		||||
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
 | 
			
		||||
        transaction.replace(R.id.posts_list_target, postsListFragment);
 | 
			
		||||
        transaction.commit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Toggle progress bar visibility
 | 
			
		||||
     *
 | 
			
		||||
     * @param visible Specify whether the progress bar should be visible or not
 | 
			
		||||
     */
 | 
			
		||||
    private void toggleLoadingBarVisibility(boolean visible){
 | 
			
		||||
        mProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Toggle no post notice visibility
 | 
			
		||||
     *
 | 
			
		||||
     * @param visible The visibility of the no post notice
 | 
			
		||||
     */
 | 
			
		||||
    private void toggleNoPostNoticeVisibility(boolean visible){
 | 
			
		||||
        mNoPostNotice.setVisibility(visible ? View.VISIBLE : View.GONE);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								app/src/main/res/layout/fragment_latest_posts.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								app/src/main/res/layout/fragment_latest_posts.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    android:orientation="vertical" android:layout_width="match_parent"
 | 
			
		||||
    android:layout_height="match_parent">
 | 
			
		||||
 | 
			
		||||
    <!-- Loading progress bar -->
 | 
			
		||||
    <ProgressBar
 | 
			
		||||
        android:id="@+id/loading_progress"
 | 
			
		||||
        android:layout_width="50dp"
 | 
			
		||||
        android:layout_height="50dp"
 | 
			
		||||
        android:layout_centerVertical="true"
 | 
			
		||||
        android:layout_centerHorizontal="true" />
 | 
			
		||||
 | 
			
		||||
    <!-- No posts notice -->
 | 
			
		||||
    <TextView
 | 
			
		||||
        android:id="@+id/no_post_notice"
 | 
			
		||||
        android:layout_width="wrap_content"
 | 
			
		||||
        android:layout_height="wrap_content"
 | 
			
		||||
        android:text="@string/notice_no_latest_posts"
 | 
			
		||||
        android:layout_centerHorizontal="true"
 | 
			
		||||
        android:layout_marginTop="15dp" />
 | 
			
		||||
 | 
			
		||||
    <!-- Posts list -->
 | 
			
		||||
    <FrameLayout
 | 
			
		||||
        android:id="@+id/posts_list_target"
 | 
			
		||||
        android:layout_width="match_parent"
 | 
			
		||||
        android:layout_height="match_parent" />
 | 
			
		||||
 | 
			
		||||
</RelativeLayout>
 | 
			
		||||
@@ -2,6 +2,11 @@
 | 
			
		||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
			
		||||
 | 
			
		||||
    <!-- Open user page -->
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/action_open_user_page"
 | 
			
		||||
        android:title="@string/main_menu_personal_page"/>
 | 
			
		||||
 | 
			
		||||
    <!-- Display friends list -->
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/action_friends_list"
 | 
			
		||||
 
 | 
			
		||||
@@ -185,4 +185,8 @@
 | 
			
		||||
    <string name="success_clear_local_db">The local database has been successfully cleared! You may need to restart the application to make the changes being fully applied.</string>
 | 
			
		||||
    <string name="err_clear_local_db">An error occurred while trying to clear local database!</string>
 | 
			
		||||
    <string name="image_description_pick_image">Pick an image</string>
 | 
			
		||||
    <string name="main_menu_personal_page">My page</string>
 | 
			
		||||
    <string name="fragment_latestposts_title">Latest posts</string>
 | 
			
		||||
    <string name="err_get_latest_posts">An error occurred while trying to retrieve the list of latest posts!</string>
 | 
			
		||||
    <string name="notice_no_latest_posts">You do not have any latest posts to display here.</string>
 | 
			
		||||
</resources>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user