From 97ebcd4bda1893b480daa3715e3e31644baa9ace Mon Sep 17 00:00:00 2001 From: stom79 Date: Tue, 14 Aug 2018 11:10:49 +0200 Subject: [PATCH] Search in tabs - part 1 --- .../mastodon/activities/BaseMainActivity.java | 44 ++++++++++++++++--- .../fragments/DisplaySearchFragment.java | 2 + .../gouv/etalab/mastodon/helper/Helper.java | 35 +++++++++++++++ 3 files changed, 75 insertions(+), 6 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 f63f32e43..512e90b17 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 @@ -33,6 +33,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.AppBarLayout; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.TabItem; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; @@ -103,6 +104,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRemoteAccountInterface; import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface; import fr.gouv.etalab.mastodon.services.BackupStatusService; import fr.gouv.etalab.mastodon.services.LiveNotificationService; +import fr.gouv.etalab.mastodon.sqlite.SearchDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; @@ -160,6 +162,8 @@ public abstract class BaseMainActivity extends BaseActivity private String bookmark; private String userId; private String instance; + public int countPage; + private PagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -369,14 +373,14 @@ public abstract class BaseMainActivity extends BaseActivity viewPager = findViewById(R.id.viewpager); - int countPage = 2; + 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 = findViewById(R.id.main_app_container); - PagerAdapter adapter = new PagerAdapter + adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); @@ -915,12 +919,16 @@ public abstract class BaseMainActivity extends BaseActivity } } }; + refreshSearchTab(); LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA)); // Retrieves instance new RetrieveInstanceAsyncTask(getApplicationContext(), BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } + public void refreshSearchTab(){ + Helper.addSearchTag(BaseMainActivity.this, tabLayout, adapter); + } protected abstract void rateThisApp(); @@ -1310,6 +1318,7 @@ public abstract class BaseMainActivity extends BaseActivity LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA)); LocalBroadcastManager.getInstance(this).registerReceiver(receive_local_data, new IntentFilter(Helper.RECEIVE_LOCAL_DATA)); + } @Override @@ -1559,7 +1568,7 @@ public abstract class BaseMainActivity extends BaseActivity /** * Page Adapter for settings */ - private class PagerAdapter extends FragmentStatePagerAdapter { + public class PagerAdapter extends FragmentStatePagerAdapter { int mNumOfTabs; private PagerAdapter(FragmentManager fm, int NumOfTabs) { @@ -1567,6 +1576,19 @@ public abstract class BaseMainActivity extends BaseActivity this.mNumOfTabs = NumOfTabs; } + public void removeTabPage(int position) { + tabLayout.removeTabAt(position); + this.mNumOfTabs--; + notifyDataSetChanged(); + } + + public void addTabPage(String title) { + TabLayout.Tab tab = tabLayout.newTab(); + tab.setText(title); + this.mNumOfTabs++; + notifyDataSetChanged(); + } + @Override public Fragment getItem(int position) { //Remove the search bar @@ -1575,6 +1597,9 @@ public abstract class BaseMainActivity extends BaseActivity tabLayout.setVisibility(View.VISIBLE); toolbar_search.setIconified(true); } + SQLiteDatabase db = Sqlite.getInstance(BaseMainActivity.this, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + List searches = new SearchDAO(BaseMainActivity.this, db).getAllSearch(); + int sizeSearches = (searches ==null)?0:searches.size(); //Selection comes from another menu, no action to do DisplayStatusFragment statusFragment; Bundle bundle = new Bundle(); @@ -1591,18 +1616,24 @@ public abstract class BaseMainActivity extends BaseActivity bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.LOCAL); statusFragment.setArguments(bundle); return statusFragment; - }else if(position == 2){ + }else if(position == 2 && display_global){ statusFragment = new DisplayStatusFragment(); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC); statusFragment.setArguments(bundle); return statusFragment; - }else if (position == 3){ + }else if (position == 3 && display_global && display_local){ statusFragment = new DisplayStatusFragment(); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC); statusFragment.setArguments(bundle); return statusFragment; + }else{ //Here it's a search fragment + statusFragment = new DisplayStatusFragment(); + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.TAG); + if( tabLayout.getTabAt(position) != null && tabLayout.getTabAt(position).getText() != null) + bundle.putString("tag", tabLayout.getTabAt(position).getText().toString()); + statusFragment.setArguments(bundle); + return statusFragment; } - return null; } @NonNull @@ -1630,6 +1661,7 @@ public abstract class BaseMainActivity extends BaseActivity } return createdFragment; } + @Override public int getCount() { return mNumOfTabs; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchFragment.java index 1cc12b048..b07813fee 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplaySearchFragment.java @@ -37,6 +37,7 @@ import android.widget.RelativeLayout; import java.util.ArrayList; import java.util.List; +import fr.gouv.etalab.mastodon.activities.BaseMainActivity; import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.drawers.SearchTootsListAdapter; import fr.gouv.etalab.mastodon.helper.Helper; @@ -110,6 +111,7 @@ public class DisplaySearchFragment extends Fragment { return; } new SearchDAO(context, db).insertSearch(keyword); + ((BaseMainActivity)context).refreshSearchTab(); searches.add(keyword); if( textviewNoAction.getVisibility() == View.VISIBLE) textviewNoAction.setVisibility(View.GONE); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 9657a12f1..042b22774 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -33,6 +33,7 @@ import android.provider.MediaStore; import android.provider.OpenableColumns; import android.support.annotation.Nullable; import android.support.customtabs.CustomTabsIntent; +import android.support.design.widget.TabLayout; import android.support.media.ExifInterface; import android.support.v4.app.FragmentActivity; import android.support.v4.graphics.drawable.DrawableCompat; @@ -137,6 +138,7 @@ import java.util.regex.Pattern; import fr.gouv.etalab.mastodon.BuildConfig; import fr.gouv.etalab.mastodon.R; +import fr.gouv.etalab.mastodon.activities.BaseMainActivity; import fr.gouv.etalab.mastodon.activities.HashTagActivity; import fr.gouv.etalab.mastodon.activities.LoginActivity; import fr.gouv.etalab.mastodon.activities.MainActivity; @@ -154,6 +156,7 @@ import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.client.Entities.Tag; import fr.gouv.etalab.mastodon.client.Entities.Version; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; +import fr.gouv.etalab.mastodon.sqlite.SearchDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; import static android.content.Context.DOWNLOAD_SERVICE; @@ -2145,4 +2148,36 @@ public class Helper { Log.v(Helper.TAG, content); } } + + + public static void addSearchTag(Context context, TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter){ + final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + List searches = new SearchDAO(context, db).getAllSearch(); + int countInitialTab = ((BaseMainActivity) context).countPage; + int allTabCount = tableLayout.getTabCount(); + if( allTabCount > countInitialTab){ + while(allTabCount > countInitialTab){ + removeTab(tableLayout, pagerAdapter, allTabCount-1); + allTabCount -=1; + } + } + if( searches != null) + for(String search: searches){ + addTab(tableLayout, pagerAdapter, search); + } + } + + private static void removeTab(TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter, int position) { + if (tableLayout.getTabCount() >= position) { + tableLayout.removeTabAt(position); + pagerAdapter.removeTabPage(position); + } + } + + private static void addTab(TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter, String title) { + tableLayout.addTab(tableLayout.newTab().setText(title)); + pagerAdapter.addTabPage(title); + } + }