Search in tabs - part 1
This commit is contained in:
parent
6e8128cc40
commit
97ebcd4bda
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue