Search in tabs - part 1

This commit is contained in:
stom79 2018-08-14 11:10:49 +02:00
parent 6e8128cc40
commit 97ebcd4bda
3 changed files with 75 additions and 6 deletions

View File

@ -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<String> 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;

View File

@ -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);

View File

@ -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<String> 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);
}
}