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.annotation.NonNull;
import android.support.design.widget.AppBarLayout; import android.support.design.widget.AppBarLayout;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabItem;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment; 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.interfaces.OnUpdateAccountInfoInterface;
import fr.gouv.etalab.mastodon.services.BackupStatusService; import fr.gouv.etalab.mastodon.services.BackupStatusService;
import fr.gouv.etalab.mastodon.services.LiveNotificationService; 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.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
@ -160,6 +162,8 @@ public abstract class BaseMainActivity extends BaseActivity
private String bookmark; private String bookmark;
private String userId; private String userId;
private String instance; private String instance;
public int countPage;
private PagerAdapter adapter;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -369,14 +373,14 @@ public abstract class BaseMainActivity extends BaseActivity
viewPager = findViewById(R.id.viewpager); viewPager = findViewById(R.id.viewpager);
int countPage = 2; countPage = 2;
if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_LOCAL, true)) if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_LOCAL, true))
countPage++; countPage++;
if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_GLOBAL, true)) if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_GLOBAL, true))
countPage++; countPage++;
viewPager.setOffscreenPageLimit(countPage); viewPager.setOffscreenPageLimit(countPage);
main_app_container = findViewById(R.id.main_app_container); main_app_container = findViewById(R.id.main_app_container);
PagerAdapter adapter = new PagerAdapter adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount()); (getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter); viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 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)); LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
// Retrieves instance // Retrieves instance
new RetrieveInstanceAsyncTask(getApplicationContext(), BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new RetrieveInstanceAsyncTask(getApplicationContext(), BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} }
public void refreshSearchTab(){
Helper.addSearchTag(BaseMainActivity.this, tabLayout, adapter);
}
protected abstract void rateThisApp(); 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_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
LocalBroadcastManager.getInstance(this).registerReceiver(receive_local_data, new IntentFilter(Helper.RECEIVE_LOCAL_DATA)); LocalBroadcastManager.getInstance(this).registerReceiver(receive_local_data, new IntentFilter(Helper.RECEIVE_LOCAL_DATA));
} }
@Override @Override
@ -1559,7 +1568,7 @@ public abstract class BaseMainActivity extends BaseActivity
/** /**
* Page Adapter for settings * Page Adapter for settings
*/ */
private class PagerAdapter extends FragmentStatePagerAdapter { public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs; int mNumOfTabs;
private PagerAdapter(FragmentManager fm, int NumOfTabs) { private PagerAdapter(FragmentManager fm, int NumOfTabs) {
@ -1567,6 +1576,19 @@ public abstract class BaseMainActivity extends BaseActivity
this.mNumOfTabs = NumOfTabs; 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 @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
//Remove the search bar //Remove the search bar
@ -1575,6 +1597,9 @@ public abstract class BaseMainActivity extends BaseActivity
tabLayout.setVisibility(View.VISIBLE); tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true); 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 //Selection comes from another menu, no action to do
DisplayStatusFragment statusFragment; DisplayStatusFragment statusFragment;
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@ -1591,18 +1616,24 @@ public abstract class BaseMainActivity extends BaseActivity
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.LOCAL); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.LOCAL);
statusFragment.setArguments(bundle); statusFragment.setArguments(bundle);
return statusFragment; return statusFragment;
}else if(position == 2){ }else if(position == 2 && display_global){
statusFragment = new DisplayStatusFragment(); statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC);
statusFragment.setArguments(bundle); statusFragment.setArguments(bundle);
return statusFragment; return statusFragment;
}else if (position == 3){ }else if (position == 3 && display_global && display_local){
statusFragment = new DisplayStatusFragment(); statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC); bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC);
statusFragment.setArguments(bundle); statusFragment.setArguments(bundle);
return statusFragment; 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 @NonNull
@ -1630,6 +1661,7 @@ public abstract class BaseMainActivity extends BaseActivity
} }
return createdFragment; return createdFragment;
} }
@Override @Override
public int getCount() { public int getCount() {
return mNumOfTabs; return mNumOfTabs;

View File

@ -37,6 +37,7 @@ import android.widget.RelativeLayout;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.drawers.SearchTootsListAdapter; import fr.gouv.etalab.mastodon.drawers.SearchTootsListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.helper.Helper;
@ -110,6 +111,7 @@ public class DisplaySearchFragment extends Fragment {
return; return;
} }
new SearchDAO(context, db).insertSearch(keyword); new SearchDAO(context, db).insertSearch(keyword);
((BaseMainActivity)context).refreshSearchTab();
searches.add(keyword); searches.add(keyword);
if( textviewNoAction.getVisibility() == View.VISIBLE) if( textviewNoAction.getVisibility() == View.VISIBLE)
textviewNoAction.setVisibility(View.GONE); textviewNoAction.setVisibility(View.GONE);

View File

@ -33,6 +33,7 @@ import android.provider.MediaStore;
import android.provider.OpenableColumns; import android.provider.OpenableColumns;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.customtabs.CustomTabsIntent; import android.support.customtabs.CustomTabsIntent;
import android.support.design.widget.TabLayout;
import android.support.media.ExifInterface; import android.support.media.ExifInterface;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.graphics.drawable.DrawableCompat; 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.BuildConfig;
import fr.gouv.etalab.mastodon.R; 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.HashTagActivity;
import fr.gouv.etalab.mastodon.activities.LoginActivity; import fr.gouv.etalab.mastodon.activities.LoginActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity; 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.Tag;
import fr.gouv.etalab.mastodon.client.Entities.Version; import fr.gouv.etalab.mastodon.client.Entities.Version;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO; import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import static android.content.Context.DOWNLOAD_SERVICE; import static android.content.Context.DOWNLOAD_SERVICE;
@ -2145,4 +2148,36 @@ public class Helper {
Log.v(Helper.TAG, content); 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);
}
} }