From f5db2a8ba520d731f3889b70fd229c8553ccfa42 Mon Sep 17 00:00:00 2001 From: stom79 Date: Mon, 14 Jan 2019 11:50:42 +0100 Subject: [PATCH] Prepare backend 2 - TLs and menu --- .../mastodon/activities/BaseMainActivity.java | 176 ++++++++++++++++-- .../asynctasks/RetrieveFeedsAsyncTask.java | 5 +- .../UpdateAccountInfoAsyncTask.java | 3 +- .../gouv/etalab/mastodon/helper/Helper.java | 16 ++ .../drawable-anydpi/ic_pixelfed_favorite.xml | 9 + .../res/drawable-anydpi/ic_pixelfed_media.xml | 9 + app/src/main/res/layout/drawer_art.xml | 16 ++ app/src/main/res/layout/drawer_pixelfed.xml | 78 ++++++++ .../main/res/menu/activity_main_drawer.xml | 39 ++++ app/src/main/res/values/api.xml | 4 + 10 files changed, 341 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/drawable-anydpi/ic_pixelfed_favorite.xml create mode 100644 app/src/main/res/drawable-anydpi/ic_pixelfed_media.xml create mode 100644 app/src/main/res/layout/drawer_pixelfed.xml create mode 100644 app/src/main/res/values/api.xml 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 1562551c4..e48043751 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 @@ -233,7 +233,14 @@ public abstract class BaseMainActivity extends BaseActivity finish(); return; } - social = (account.getSocial() == null || account.getSocial().equals("MASTODON")? UpdateAccountInfoAsyncTask.SOCIAL.MASTODON: UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE); + + //Update the static variable which manages account type + if( account.getSocial() == null || account.getSocial().equals("MASTODON") ) + social = UpdateAccountInfoAsyncTask.SOCIAL.MASTODON; + else if( account.getSocial().equals("PEERTUBE")) + social = UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE; + else if( account.getSocial().equals("PIXELFED")) + social = UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED; countNewStatus = 0; countNewNotifications = 0; @@ -278,12 +285,13 @@ public abstract class BaseMainActivity extends BaseActivity rateThisApp(); //Intialize Peertube information + //This task will allow to instance a static PeertubeInformation class if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){ try{ new RetrievePeertubeInformationAsyncTask(getApplicationContext()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }catch (Exception ignored){} } - + //For old Mastodon releases that can't pin, this support could be removed Helper.canPin = false; Helper.fillMapEmoji(getApplicationContext()); //Here, the user is authenticated @@ -823,16 +831,140 @@ public abstract class BaseMainActivity extends BaseActivity viewPager.setVisibility(View.VISIBLE); delete_instance.setVisibility(View.GONE); Helper.switchLayout(BaseMainActivity.this); - if( tab.getPosition() == 1 || (tabPosition.containsKey("art") && tab.getPosition() == tabPosition.get("art"))) { - toot.hide(); + tootShow(); + if( !displayFollowInstance) federatedTimelines.hide(); - }else { - tootShow(); - if( !displayFollowInstance) - federatedTimelines.hide(); - else - federatedTimelinesShow(); + else + federatedTimelinesShow(); + DrawerLayout drawer = findViewById(R.id.drawer_layout); + drawer.closeDrawer(GravityCompat.START); + if( tab.getCustomView() != null) { + ImageView icon = tab.getCustomView().findViewById(R.id.tab_icon); + if( icon != null) + if( theme == THEME_BLACK) + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon), PorterDuff.Mode.SRC_IN); + else + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.mastodonC4), PorterDuff.Mode.SRC_IN); + } + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + if( tab.getCustomView() != null) { + ImageView icon = tab.getCustomView().findViewById(R.id.tab_icon); + if( icon != null) + if( theme == THEME_LIGHT) + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon), PorterDuff.Mode.SRC_IN); + else + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); + } + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + if( tab.getCustomView() != null) { + ImageView icon = tab.getCustomView().findViewById(R.id.tab_icon); + if( icon != null) + if( theme == THEME_BLACK) + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon), PorterDuff.Mode.SRC_IN); + else + icon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.mastodonC4), PorterDuff.Mode.SRC_IN); + } + } + }); + + //Scroll to top when top bar is clicked for favourites/blocked/muted + toolbarTitle.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Fragment fragment = (Fragment) viewPager.getAdapter().instantiateItem(viewPager, tabLayout.getSelectedTabPosition()); + DisplayStatusFragment displayStatusFragment = ((DisplayStatusFragment) fragment); + displayStatusFragment.scrollToTop(); + } + }); + }else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED){ + TabLayout.Tab pfTabHome = tabLayout.newTab(); + TabLayout.Tab pfTabLocal = tabLayout.newTab(); + TabLayout.Tab pfTabDiscover = tabLayout.newTab(); + + + + pfTabHome.setCustomView(R.layout.tab_badge); + pfTabLocal.setCustomView(R.layout.tab_badge); + pfTabDiscover.setCustomView(R.layout.tab_badge); + + + @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") + ImageView iconHome = pfTabHome.getCustomView().findViewById(R.id.tab_icon); + + iconHome.setImageResource(R.drawable.ic_home); + + if (theme == THEME_BLACK) + iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_icon), PorterDuff.Mode.SRC_IN); + else + iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.mastodonC4), PorterDuff.Mode.SRC_IN); + + + @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") + ImageView iconLocal = pfTabLocal.getCustomView().findViewById(R.id.tab_icon); + iconLocal.setImageResource(R.drawable.ic_people); + + + @SuppressWarnings("ConstantConditions") @SuppressLint("CutPasteId") + ImageView iconDiscover = pfTabDiscover.getCustomView().findViewById(R.id.tab_icon); + iconDiscover.setImageResource(R.drawable.ic_people); + + + + iconHome.setContentDescription(getString(R.string.home_menu)); + iconDiscover.setContentDescription(getString(R.string.overview)); + iconLocal.setContentDescription(getString(R.string.local)); + + + if (theme == THEME_LIGHT) { + iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); + iconDiscover.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); + iconLocal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.action_light_header), PorterDuff.Mode.SRC_IN); + } else { + iconHome.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); + iconDiscover.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); + iconLocal.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.dark_text), PorterDuff.Mode.SRC_IN); + } + + toot.setImageResource(R.drawable.ic_cloud_upload); + + tabLayout.addTab(pfTabHome); + tabLayout.addTab(pfTabLocal); + tabLayout.addTab(pfTabDiscover); + + + + main_app_container = findViewById(R.id.main_app_container); + adapter = new PagerAdapter + (getSupportFragmentManager(), tabLayout.getTabCount()); + viewPager.setAdapter(adapter); + viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); + tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + viewPager.setCurrentItem(tab.getPosition()); + if (stackBack.empty()) + stackBack.push(0); + if (stackBack.contains(tab.getPosition())) { + stackBack.remove(stackBack.indexOf(tab.getPosition())); + stackBack.push(tab.getPosition()); + } else { + stackBack.push(tab.getPosition()); + } + main_app_container.setVisibility(View.GONE); + viewPager.setVisibility(View.VISIBLE); + delete_instance.setVisibility(View.GONE); + Helper.switchLayout(BaseMainActivity.this); + tootShow(); + if( !displayFollowInstance) + federatedTimelines.hide(); + else + federatedTimelinesShow(); DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); if( tab.getCustomView() != null) { @@ -1096,7 +1228,7 @@ public abstract class BaseMainActivity extends BaseActivity popup.getMenuInflater() .inflate(R.menu.main, popup.getMenu()); - if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){ + if( social != UpdateAccountInfoAsyncTask.SOCIAL.MASTODON){ MenuItem action_about_instance = popup.getMenu().findItem(R.id.action_about_instance); if( action_about_instance != null) action_about_instance.setVisible(false); @@ -1273,7 +1405,7 @@ public abstract class BaseMainActivity extends BaseActivity startActivity(intent); } }); - if( social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE) + if( social != UpdateAccountInfoAsyncTask.SOCIAL.MASTODON) optionInfo.setVisibility(View.GONE); MenuFloating.tags = new ArrayList<>(); updateHeaderAccountInfo(activity, account, headerLayout); @@ -2312,6 +2444,26 @@ public abstract class BaseMainActivity extends BaseActivity bundle.putString("instanceType","PEERTUBE"); fragment.setArguments(bundle); return fragment; + }else if (social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED){ + //Remove the search bar + if( !toolbar_search.isIconified() ) { + toolbarTitle.setVisibility(View.VISIBLE); + tabLayout.setVisibility(View.VISIBLE); + toolbar_search.setIconified(true); + } + //Selection comes from another menu, no action to do + Bundle bundle = new Bundle(); + DisplayStatusFragment fragment = new DisplayStatusFragment(); + if (position == 0) { + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PF_HOME); + }else if( position == 1) { + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PF_LOCAL); + }else if( position == 2) { + bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PF_DISCOVER); + } + bundle.putString("instanceType","PIXELFED"); + fragment.setArguments(bundle); + return fragment; } return null; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java index 21e899a3a..92750312b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/RetrieveFeedsAsyncTask.java @@ -86,7 +86,10 @@ public class RetrieveFeedsAsyncTask extends AsyncTask { PMYVIDEOS, PLOCAL, CHANNEL, - MYVIDEOS + MYVIDEOS, + PF_HOME, + PF_LOCAL, + PF_DISCOVER } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java index c6da177a5..379f8a0ae 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java @@ -49,7 +49,8 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { public enum SOCIAL{ MASTODON, - PEERTUBE + PEERTUBE, + PIXELFED } public UpdateAccountInfoAsyncTask(Context context, String token, String client_id, String client_secret, String refresh_token, String instance, SOCIAL social){ this.contextReference = new WeakReference<>(context); 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 4fb06acc8..367f44e2c 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 @@ -1267,11 +1267,27 @@ public class Helper { MenuItem itemOpt = menu.findItem(R.id.nav_main_opt); if( itemOpt != null) itemOpt.setVisible(false); + MenuItem itemPFCom = menu.findItem(R.id.nav_pixelfed_comm); + if( itemPFCom != null) + itemPFCom.setVisible(false); + }else if( BaseMainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED){ + MenuItem itemCom = menu.findItem(R.id.nav_main_com); + if( itemCom != null) + itemCom.setVisible(false); + MenuItem itemOpt = menu.findItem(R.id.nav_main_opt); + if( itemOpt != null) + itemOpt.setVisible(false); + MenuItem itemPCom = menu.findItem(R.id.nav_peertube_comm); + if( itemPCom != null) + itemPCom.setVisible(false); }else if( BaseMainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON){ MenuItem itemCom = menu.findItem(R.id.nav_peertube_comm); if( itemCom != null) itemCom.setVisible(false); + MenuItem itemPFCom = menu.findItem(R.id.nav_pixelfed_comm); + if( itemPFCom != null) + itemPFCom.setVisible(false); } } diff --git a/app/src/main/res/drawable-anydpi/ic_pixelfed_favorite.xml b/app/src/main/res/drawable-anydpi/ic_pixelfed_favorite.xml new file mode 100644 index 000000000..cfba5d846 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_pixelfed_favorite.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable-anydpi/ic_pixelfed_media.xml b/app/src/main/res/drawable-anydpi/ic_pixelfed_media.xml new file mode 100644 index 000000000..d2bf51285 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_pixelfed_media.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/drawer_art.xml b/app/src/main/res/layout/drawer_art.xml index c98d7886f..6d326e866 100644 --- a/app/src/main/res/layout/drawer_art.xml +++ b/app/src/main/res/layout/drawer_art.xml @@ -1,4 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 630761f70..f1aa3253e 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -1,6 +1,7 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/api.xml b/app/src/main/res/values/api.xml new file mode 100644 index 000000000..aca6afa1f --- /dev/null +++ b/app/src/main/res/values/api.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file