From 201afec5717b0f976c1c1979d65eb933b63ebb41 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 21 Oct 2017 16:56:17 +0200 Subject: [PATCH 1/4] Some cleaning --- .../mastodon/activities/BaseMainActivity.java | 74 +++++++++---------- 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index 00afbb3b2..fb043bd3e 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -178,11 +178,11 @@ public abstract class BaseMainActivity extends AppCompatActivity Helper.canPin = false; Helper.fillMapEmoji(getApplicationContext()); //Here, the user is authenticated - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); - toolbar_search = (SearchView) toolbar.findViewById(R.id.toolbar_search); - tabLayout = (TabLayout) findViewById(R.id.tabLayout); + toolbarTitle = toolbar.findViewById(R.id.toolbar_title); + toolbar_search = toolbar.findViewById(R.id.toolbar_search); + tabLayout = findViewById(R.id.tabLayout); TabLayout.Tab tabHome = tabLayout.newTab(); TabLayout.Tab tabNotif = tabLayout.newTab(); TabLayout.Tab tabLocal = tabLayout.newTab(); @@ -193,23 +193,23 @@ public abstract class BaseMainActivity extends AppCompatActivity tabPublic.setCustomView(R.layout.tab_badge); @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") - ImageView iconHome = (ImageView) tabHome.getCustomView().findViewById(R.id.tab_icon); + ImageView iconHome = tabHome.getCustomView().findViewById(R.id.tab_icon); iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconHome.setImageResource(R.drawable.ic_action_home_tl); @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") - ImageView iconNotif = (ImageView) tabNotif.getCustomView().findViewById(R.id.tab_icon); + ImageView iconNotif = tabNotif.getCustomView().findViewById(R.id.tab_icon); iconNotif.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconNotif.setImageResource(R.drawable.ic_notifications_tl); @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") - ImageView iconLocal = (ImageView) tabLocal.getCustomView().findViewById(R.id.tab_icon); + ImageView iconLocal = tabLocal.getCustomView().findViewById(R.id.tab_icon); iconLocal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconLocal.setImageResource(R.drawable.ic_action_users_tl); @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") - ImageView iconGlobal = (ImageView) tabPublic.getCustomView().findViewById(R.id.tab_icon); + ImageView iconGlobal = tabPublic.getCustomView().findViewById(R.id.tab_icon); iconGlobal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); iconGlobal.setImageResource(R.drawable.ic_action_globe_tl); @@ -375,14 +375,14 @@ public abstract class BaseMainActivity extends AppCompatActivity } }); - viewPager = (ViewPager) findViewById(R.id.viewpager); + viewPager = findViewById(R.id.viewpager); int countPage = 2; if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_LOCAL, true)) countPage++; if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_GLOBAL, true)) countPage++; viewPager.setOffscreenPageLimit(countPage); - main_app_container = (RelativeLayout) findViewById(R.id.main_app_container); + main_app_container = findViewById(R.id.main_app_container); PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); @@ -406,7 +406,7 @@ public abstract class BaseMainActivity extends AppCompatActivity toot.setVisibility(View.VISIBLE); else toot.setVisibility(View.GONE); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); } @@ -421,7 +421,7 @@ public abstract class BaseMainActivity extends AppCompatActivity viewPager.setVisibility(View.VISIBLE); Helper.switchLayout(BaseMainActivity.this); main_app_container.setVisibility(View.GONE); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); } if( tab.getPosition() != 1 ) @@ -454,7 +454,7 @@ public abstract class BaseMainActivity extends AppCompatActivity } }); - final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + final NavigationView navigationView = findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); @@ -580,7 +580,7 @@ public abstract class BaseMainActivity extends AppCompatActivity //Defines the current locale of the device in a static variable currentLocale = Helper.currentLocale(getApplicationContext()); - toot = (FloatingActionButton) findViewById(R.id.toot); + toot = findViewById(R.id.toot); toot.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -606,12 +606,12 @@ public abstract class BaseMainActivity extends AppCompatActivity options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(20)).cacheInMemory(false) .cacheOnDisk(true).resetViewBeforeLoading(true).build(); - final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + final DrawerLayout drawer = findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); toggle.setDrawerIndicatorEnabled(false); - ImageView iconbar = (ImageView) toolbar.findViewById(R.id.iconbar); + ImageView iconbar = toolbar.findViewById(R.id.iconbar); iconbar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -621,7 +621,7 @@ public abstract class BaseMainActivity extends AppCompatActivity Helper.loadPictureIcon(BaseMainActivity.this, account.getAvatar(),iconbar); headerLayout = navigationView.getHeaderView(0); mamageNewIntent(getIntent()); - final ImageView menuMore = (ImageView) headerLayout.findViewById(R.id.header_option_menu); + final ImageView menuMore = headerLayout.findViewById(R.id.header_option_menu); menuMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -695,10 +695,10 @@ public abstract class BaseMainActivity extends AppCompatActivity @SuppressLint("InflateParams") View popup_quick_settings = getLayoutInflater().inflate( R.layout.popup_text_size, null ); builder.setView(popup_quick_settings); - SeekBar set_text_size = (SeekBar) popup_quick_settings.findViewById(R.id.set_text_size); - SeekBar set_icon_size = (SeekBar) popup_quick_settings.findViewById(R.id.set_icon_size); - final TextView set_text_size_value = (TextView) popup_quick_settings.findViewById(R.id.set_text_size_value); - final TextView set_icon_size_value = (TextView) popup_quick_settings.findViewById(R.id.set_icon_size_value); + SeekBar set_text_size = popup_quick_settings.findViewById(R.id.set_text_size); + SeekBar set_icon_size = popup_quick_settings.findViewById(R.id.set_icon_size); + final TextView set_text_size_value = popup_quick_settings.findViewById(R.id.set_text_size_value); + final TextView set_icon_size_value = popup_quick_settings.findViewById(R.id.set_icon_size_value); set_text_size_value.setText(String.format("%s%%",String.valueOf(textSize))); set_icon_size_value.setText(String.format("%s%%",String.valueOf(iconSize))); @@ -764,7 +764,7 @@ public abstract class BaseMainActivity extends AppCompatActivity navigationView.getMenu().findItem(R.id.nav_follow_request).setVisible(false); } - LinearLayout owner_container = (LinearLayout) headerLayout.findViewById(R.id.main_header_container); + LinearLayout owner_container = headerLayout.findViewById(R.id.main_header_container); owner_container.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -792,8 +792,8 @@ public abstract class BaseMainActivity extends AppCompatActivity @SuppressLint("InflateParams") View dialogView = inflater.inflate(R.layout.popup_quick_settings, null); dialogBuilder.setView(dialogView); - final SwitchCompat set_push_hometimeline = (SwitchCompat) dialogView.findViewById(R.id.set_push_hometimeline); - final SwitchCompat set_push_notification = (SwitchCompat) dialogView.findViewById(R.id.set_push_notification); + final SwitchCompat set_push_hometimeline = dialogView.findViewById(R.id.set_push_hometimeline); + final SwitchCompat set_push_notification = dialogView.findViewById(R.id.set_push_notification); boolean notif_hometimeline = sharedpreferences.getBoolean(Helper.SET_NOTIF_HOMETIMELINE, true); boolean notif_follow = sharedpreferences.getBoolean(Helper.SET_NOTIF_FOLLOW, true); boolean notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD, true); @@ -851,7 +851,7 @@ public abstract class BaseMainActivity extends AppCompatActivity String userIdIntent; boolean matchingIntent = false; if( extras.containsKey(INTENT_ACTION) ){ - final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + final NavigationView navigationView = findViewById(R.id.nav_view); userIdIntent = extras.getString(PREF_KEY_ID); //Id of the account in the intent if (extras.getInt(INTENT_ACTION) == NOTIFICATION_INTENT){ changeUser(BaseMainActivity.this, userIdIntent, false); //Connects the account which is related to the notification @@ -946,7 +946,7 @@ public abstract class BaseMainActivity extends AppCompatActivity @Override public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { @@ -968,7 +968,7 @@ public abstract class BaseMainActivity extends AppCompatActivity viewPager.setVisibility(View.VISIBLE); tabLayout.setVisibility(View.VISIBLE); toolbarTitle.setVisibility(View.GONE); - final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + final NavigationView navigationView = findViewById(R.id.nav_view); unCheckAllMenuItems(navigationView); toot.setVisibility(View.VISIBLE); //Manages theme for icon colors @@ -1079,8 +1079,10 @@ public abstract class BaseMainActivity extends AppCompatActivity homeFragment.refresh(status); } } else if (eventStreaming == StreamingService.EventStreaming.DELETE) { + //noinspection unused String id = b.getString("id"); if (notificationsFragment != null) { + //noinspection StatementWithEmptyBody if (notificationsFragment.getUserVisibleHint()) { } else { @@ -1140,7 +1142,7 @@ public abstract class BaseMainActivity extends AppCompatActivity startActivity(remoteFollow); return false; } - final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); + final NavigationView navigationView = findViewById(R.id.nav_view); unCheckAllMenuItems(navigationView); item.setChecked(true); //Remove the search bar @@ -1210,7 +1212,7 @@ public abstract class BaseMainActivity extends AppCompatActivity } populateTitleWithTag(fragmentTag, item.getTitle().toString(), item.getItemId()); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } @@ -1252,6 +1254,7 @@ public abstract class BaseMainActivity extends AppCompatActivity protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); + //noinspection StatementWithEmptyBody if (requestCode == ERROR_DIALOG_REQUEST_CODE) { // Adding a fragment via GooglePlayServicesUtil.showErrorDialogFragment // before the instance state is restored throws an error. So instead, @@ -1320,7 +1323,7 @@ public abstract class BaseMainActivity extends AppCompatActivity bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.LOCAL); statusFragment.setArguments(bundle); return statusFragment; - }else if( position == 2 && !display_local){ + }else if(position == 2){ statusFragment = new DisplayStatusFragment(); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC); statusFragment.setArguments(bundle); @@ -1372,7 +1375,7 @@ public abstract class BaseMainActivity extends AppCompatActivity View tabHome = tabLayout.getTabAt(0).getCustomView(); if( tabHome == null) return; - TextView tabCounterHome = (TextView) tabHome.findViewById(R.id.tab_counter); + TextView tabCounterHome = tabHome.findViewById(R.id.tab_counter); tabCounterHome.setText(String.valueOf(countNewStatus)); if( countNewStatus> 0){ //New data are available @@ -1390,7 +1393,7 @@ public abstract class BaseMainActivity extends AppCompatActivity View tabNotif = tabLayout.getTabAt(1).getCustomView(); if( tabNotif == null) return; - TextView tabCounterNotif = (TextView) tabNotif.findViewById(R.id.tab_counter); + TextView tabCounterNotif = tabNotif.findViewById(R.id.tab_counter); tabCounterNotif.setText(String.valueOf(countNewNotifications)); if( countNewNotifications > 0){ tabCounterNotif.setVisibility(View.VISIBLE); @@ -1399,17 +1402,10 @@ public abstract class BaseMainActivity extends AppCompatActivity } } - public static boolean isActivityVisible() { - return activityVisible; - } - private static void activityResumed() { - activityVisible = true; } private static void activityPaused() { - activityVisible = false; } - private static boolean activityVisible; } From cef711a897923117e3e353cc940b491b39255115 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 21 Oct 2017 17:09:10 +0200 Subject: [PATCH 2/4] improves known status --- .../fragments/DisplayStatusFragment.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 0f6a7fe58..eba180c29 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -61,6 +61,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn private StatusListAdapter statusListAdapter; private String max_id; private List statuses; + private ArrayList knownId; private RetrieveFeedsAsyncTask.Type type; private RelativeLayout mainLoader, nextElementLoader, textviewNoAction; private boolean firstLoad; @@ -85,6 +86,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_status, container, false); statuses = new ArrayList<>(); + context = getContext(); Bundle bundle = this.getArguments(); boolean comesFromSearch = false; @@ -104,6 +106,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn assert statusesReceived != null; for(Parcelable status: statusesReceived){ statuses.add((Status) status); + knownId.add(((Status) status).getId()); } comesFromSearch = true; } @@ -166,6 +169,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public void onRefresh() { max_id = null; statuses = new ArrayList<>(); + knownId = new ArrayList<>(); firstLoad = true; flag_loading = true; swiped = true; @@ -253,10 +257,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn } if( statuses != null && statuses.size() > 0) { - ArrayList knownId = new ArrayList<>(); - for(Status st: this.statuses){ - knownId.add(st.getId()); - } for(Status tmpStatus: statuses){ if( !knownId.contains(tmpStatus.getId())) { if( type == RetrieveFeedsAsyncTask.Type.HOME && firstLoad && lastReadStatus != null && Long.parseLong(tmpStatus.getId()) > Long.parseLong(lastReadStatus)){ @@ -266,6 +266,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn tmpStatus.setNew(false); } this.statuses.add(tmpStatus); + knownId.add(tmpStatus.getId()); } } @@ -315,6 +316,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn int top = (v == null) ? 0 : v.getTop(); status.setReplies(new ArrayList()); statuses.add(0,status); + knownId.add(0,status.getId()); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); if( !status.getAccount().getId().equals(userId)) @@ -338,6 +340,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn status.setReplies(new ArrayList()); statuses.add(0, status); } + knownId.add(0, status.getId()); if (textviewNoAction.getVisibility() == View.VISIBLE) textviewNoAction.setVisibility(View.GONE); } @@ -518,10 +521,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn @Override public void onRetrieveMissingFeeds(List statuses) { if( statuses != null && statuses.size() > 0) { - ArrayList knownId = new ArrayList<>(); - for (Status st : this.statuses) { - knownId.add(st.getId()); - } if( lv_status.getFirstVisiblePosition() > 1 ) { int index = lv_status.getFirstVisiblePosition() + statuses.size(); View v = lv_status.getChildAt(0); @@ -530,6 +529,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn if (!knownId.contains(statuses.get(i).getId())) { if (type == RetrieveFeedsAsyncTask.Type.HOME) statuses.get(i).setNew(true); + knownId.add(0, statuses.get(i).getId()); statuses.get(i).setReplies(new ArrayList()); this.statuses.add(0, statuses.get(i)); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); @@ -545,6 +545,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn if (!knownId.contains(statuses.get(i).getId())) { if (type == RetrieveFeedsAsyncTask.Type.HOME) statuses.get(i).setNew(true); + knownId.add(0,statuses.get(i).getId()); statuses.get(i).setReplies(new ArrayList()); this.statuses.add(0, statuses.get(i)); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); From 586535840f28ce3d6b74a1ca2d531866dd6a6d75 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 21 Oct 2017 17:15:52 +0200 Subject: [PATCH 3/4] some cleaning --- .../activities/ShowAccountActivity.java | 5 --- .../fragments/DisplayAccountsFragment.java | 35 +++---------------- .../fragments/DisplayStatusFragment.java | 20 +++++------ 3 files changed, 13 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java index 7b9c08422..dbc2118de 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowAccountActivity.java @@ -112,7 +112,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi private TabLayout tabLayout; private TextView account_note, account_follow_request; private String userId; - private static int instanceValue = 0; private Relationship relationship; private boolean showMediaOnly, showPinned; private ImageView pp_actionBar; @@ -148,7 +147,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi } setContentView(R.layout.activity_show_account); setTitle(""); - instanceValue += 1; pins = new ArrayList<>(); Bundle b = getIntent().getExtras(); account_follow = findViewById(R.id.account_follow); @@ -673,7 +671,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi bundle.putBoolean("hideHeader",true); bundle.putBoolean("showMediaOnly",showMediaOnly); bundle.putBoolean("showPinned",showPinned); - bundle.putString("hideHeaderValue",String.valueOf(instanceValue)); displayStatusFragment.setArguments(bundle); return displayStatusFragment; case 1: @@ -681,7 +678,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWING); bundle.putString("targetedId", accountId); bundle.putBoolean("hideHeader",true); - bundle.putString("hideHeaderValue",String.valueOf(instanceValue)); displayAccountsFragment.setArguments(bundle); return displayAccountsFragment; case 2: @@ -689,7 +685,6 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi bundle.putSerializable("type", RetrieveAccountsAsyncTask.Type.FOLLOWERS); bundle.putString("targetedId", accountId); bundle.putBoolean("hideHeader",true); - bundle.putString("hideHeaderValue",String.valueOf(instanceValue)); displayAccountsFragment.setArguments(bundle); return displayAccountsFragment; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java index e84b5685c..15a31fc67 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayAccountsFragment.java @@ -14,14 +14,12 @@ package fr.gouv.etalab.mastodon.fragments; * You should have received a copy of the GNU General Public License along with Mastalab; if not, * see . */ import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.app.Fragment; -import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.ViewCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; @@ -66,7 +64,6 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou private String targetedId; private boolean swiped; private ListView lv_accounts; - private String instanceValue; boolean hideHeader; @Override @@ -83,7 +80,6 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou type = (RetrieveAccountsAsyncTask.Type) bundle.get("type"); targetedId = bundle.getString("targetedId", null); hideHeader = bundle.getBoolean("hideHeader", false); - instanceValue = bundle.getString("hideHeaderValue", null); if( bundle.containsKey("accounts")){ ArrayList accountsReceived = bundle.getParcelableArrayList("accounts"); assert accountsReceived != null; @@ -98,13 +94,12 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou flag_loading = true; swiped = false; - swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeContainer); - SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - lv_accounts = (ListView) rootView.findViewById(R.id.lv_accounts); + swipeRefreshLayout = rootView.findViewById(R.id.swipeContainer); + lv_accounts = rootView.findViewById(R.id.lv_accounts); - mainLoader = (RelativeLayout) rootView.findViewById(R.id.loader); - nextElementLoader = (RelativeLayout) rootView.findViewById(R.id.loading_next_accounts); - textviewNoAction = (RelativeLayout) rootView.findViewById(R.id.no_action); + mainLoader = rootView.findViewById(R.id.loader); + nextElementLoader = rootView.findViewById(R.id.loading_next_accounts); + textviewNoAction = rootView.findViewById(R.id.no_action); mainLoader.setVisibility(View.VISIBLE); nextElementLoader.setVisibility(View.GONE); accountsListAdapter = new AccountsListAdapter(context, type, targetedId, this.accounts); @@ -115,31 +110,11 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou if (hideHeader && Build.VERSION.SDK_INT >= 21) ViewCompat.setNestedScrollingEnabled(lv_accounts, true); lv_accounts.setOnScrollListener(new AbsListView.OnScrollListener() { - int lastFirstVisibleItem = 0; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (hideHeader && Build.VERSION.SDK_INT < 21) { - if(firstVisibleItem == 0 && Helper.listIsAtTop(lv_accounts)){ - Intent intent = new Intent(Helper.HEADER_ACCOUNT+instanceValue); - intent.putExtra("hide", false); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - }else if (view.getId() == lv_accounts.getId() && totalItemCount > visibleItemCount) { - final int currentFirstVisibleItem = lv_accounts.getFirstVisiblePosition(); - if (currentFirstVisibleItem > lastFirstVisibleItem) { - Intent intent = new Intent(Helper.HEADER_ACCOUNT + instanceValue); - intent.putExtra("hide", true); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } else if (currentFirstVisibleItem < lastFirstVisibleItem) { - Intent intent = new Intent(Helper.HEADER_ACCOUNT + instanceValue); - intent.putExtra("hide", false); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } - lastFirstVisibleItem = currentFirstVisibleItem; - } - } if (firstVisibleItem + visibleItemCount == totalItemCount) { if (!flag_loading) { flag_loading = true; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index eba180c29..52ebed89f 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -74,8 +74,6 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn private int behaviorWithAttachments; private boolean showMediaOnly, showPinned; private int positionSpinnerTrans; - private boolean hideHeader; - private String instanceValue; private String lastReadStatus; private Intent streamingFederatedIntent, streamingLocalIntent; @@ -86,18 +84,17 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_status, container, false); statuses = new ArrayList<>(); - + knownId = new ArrayList<>(); context = getContext(); Bundle bundle = this.getArguments(); boolean comesFromSearch = false; - hideHeader = false; + boolean hideHeader = false; showMediaOnly = false; showPinned = false; if (bundle != null) { type = (RetrieveFeedsAsyncTask.Type) bundle.get("type"); targetedId = bundle.getString("targetedId", null); tag = bundle.getString("tag", null); - instanceValue = bundle.getString("hideHeaderValue", null); hideHeader = bundle.getBoolean("hideHeader", false); showMediaOnly = bundle.getBoolean("showMediaOnly",false); showPinned = bundle.getBoolean("showPinned",false); @@ -119,15 +116,15 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); isOnWifi = Helper.isOnWIFI(context); positionSpinnerTrans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX); - swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeContainer); + swipeRefreshLayout = rootView.findViewById(R.id.swipeContainer); behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); if( type == RetrieveFeedsAsyncTask.Type.HOME) lastReadStatus = sharedpreferences.getString(Helper.LAST_HOMETIMELINE_MAX_ID + userId, null); - lv_status = (ListView) rootView.findViewById(R.id.lv_status); - mainLoader = (RelativeLayout) rootView.findViewById(R.id.loader); - nextElementLoader = (RelativeLayout) rootView.findViewById(R.id.loading_next_status); - textviewNoAction = (RelativeLayout) rootView.findViewById(R.id.no_action); + lv_status = rootView.findViewById(R.id.lv_status); + mainLoader = rootView.findViewById(R.id.loader); + nextElementLoader = rootView.findViewById(R.id.loading_next_status); + textviewNoAction = rootView.findViewById(R.id.no_action); mainLoader.setVisibility(View.VISIBLE); nextElementLoader.setVisibility(View.GONE); statusListAdapter = new StatusListAdapter(context, type, targetedId, isOnWifi, behaviorWithAttachments, positionSpinnerTrans, this.statuses); @@ -135,11 +132,10 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn if( !comesFromSearch){ //Hide account header when scrolling for ShowAccountActivity - if (hideHeader ) + if (hideHeader) ViewCompat.setNestedScrollingEnabled(lv_status, true); lv_status.setOnScrollListener(new AbsListView.OnScrollListener() { - int lastFirstVisibleItem = 0; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { From 998e6869be27aca065bd75f826a9921c9eb6155f Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 21 Oct 2017 19:19:11 +0200 Subject: [PATCH 4/4] Avoids jumps --- .../mastodon/fragments/DisplayStatusFragment.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 52ebed89f..558f6165c 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -304,7 +304,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn if( type == RetrieveFeedsAsyncTask.Type.HOME) { if (context == null) return; - if (status != null) { + if (status != null && !knownId.contains(status.getId())) { //Update the id of the last toot retrieved MainActivity.lastHomeId = status.getId(); int index = lv_status.getFirstVisiblePosition() + 1; @@ -325,16 +325,19 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn }else if(type == RetrieveFeedsAsyncTask.Type.PUBLIC || type == RetrieveFeedsAsyncTask.Type.LOCAL){ if (context == null) return; - //Avoids the array to be too big... - if (status != null) { + if (status != null && !knownId.contains(status.getId())) { + status.setReplies(new ArrayList()); + status.setNew(false); if (lv_status.getFirstVisiblePosition() == 0) { - status.setReplies(new ArrayList()); - status.setNew(false); statuses.add(0, status); statusListAdapter.notifyDataSetChanged(); } else { - status.setReplies(new ArrayList()); + int index = lv_status.getFirstVisiblePosition() + 1; + View v = lv_status.getChildAt(0); + int top = (v == null) ? 0 : v.getTop(); statuses.add(0, status); + statusListAdapter.notifyDataSetChanged(); + lv_status.setSelectionFromTop(index, top); } knownId.add(0, status.getId()); if (textviewNoAction.getVisibility() == View.VISIBLE)