From fa3f874826aece390b102d434737ee5a9fc85810 Mon Sep 17 00:00:00 2001 From: tom79 Date: Wed, 28 Aug 2019 14:43:10 +0200 Subject: [PATCH] Activity to manage menu #278 --- app/src/main/AndroidManifest.xml | 5 + .../android/activities/BaseMainActivity.java | 15 +- .../android/activities/HideItemActivity.java | 152 +++++++++++++ .../app/fedilab/android/helper/Helper.java | 52 ++++- .../fedilab/android/sqlite/MainMenuDAO.java | 12 +- .../res/layout/activity_hide_menu_items.xml | 206 ++++++++++++++++++ .../main/res/menu/activity_main_drawer.xml | 5 - app/src/main/res/values/strings.xml | 1 + 8 files changed, 422 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/activities/HideItemActivity.java create mode 100644 app/src/main/res/layout/activity_hide_menu_items.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0b4d2944..6ada85881 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -268,6 +268,11 @@ android:configChanges="orientation|screenSize" android:label="@string/app_name" /> + . */ +package app.fedilab.android.activities; + + +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; +import app.fedilab.android.R; + +import app.fedilab.android.client.Entities.MainMenuItem; +import app.fedilab.android.helper.Helper; +import app.fedilab.android.sqlite.MainMenuDAO; +import app.fedilab.android.sqlite.Sqlite; + + +/** + * Created by Thomas on 28/08/2019. + * Hide menu items activity + */ + +public class HideItemActivity extends BaseActivity { + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); + int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); + switch (theme){ + case Helper.THEME_LIGHT: + setTheme(R.style.AppTheme); + break; + case Helper.THEME_DARK: + setTheme(R.style.AppThemeDark); + break; + case Helper.THEME_BLACK: + setTheme(R.style.AppThemeBlack); + break; + default: + setTheme(R.style.AppThemeDark); + } + + if( getSupportActionBar() != null) + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + ActionBar actionBar = getSupportActionBar(); + if( actionBar != null ) { + LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE); + assert inflater != null; + View view = inflater.inflate(R.layout.simple_bar, new LinearLayout(getApplicationContext()), false); + actionBar.setCustomView(view, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); + ImageView toolbar_close = actionBar.getCustomView().findViewById(R.id.toolbar_close); + TextView toolbar_title = actionBar.getCustomView().findViewById(R.id.toolbar_title); + toolbar_close.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + toolbar_title.setText(R.string.hide_menu_items); + if (theme == Helper.THEME_LIGHT){ + Toolbar toolbar = actionBar.getCustomView().findViewById(R.id.toolbar); + Helper.colorizeToolbar(toolbar, R.color.black, HideItemActivity.this); + } + } + setContentView(R.layout.activity_hide_menu_items); + + SQLiteDatabase db = Sqlite.getInstance(HideItemActivity.this, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + MainMenuItem mainMenu = new MainMenuDAO(getApplicationContext(), db).getMainMenu(); + + CheckBox nav_news = findViewById(R.id.nav_news); + CheckBox nav_list = findViewById(R.id.nav_list); + CheckBox nav_scheduled = findViewById(R.id.nav_scheduled); + CheckBox nav_archive = findViewById(R.id.nav_archive); + CheckBox nav_archive_notifications = findViewById(R.id.nav_archive_notifications); + CheckBox nav_peertube = findViewById(R.id.nav_peertube); + CheckBox nav_filters = findViewById(R.id.nav_filters); + CheckBox nav_who_to_follow = findViewById(R.id.nav_who_to_follow); + CheckBox nav_administration = findViewById(R.id.nav_administration); + CheckBox nav_blocked = findViewById(R.id.nav_blocked); + CheckBox nav_muted = findViewById(R.id.nav_muted); + CheckBox nav_blocked_domains = findViewById(R.id.nav_blocked_domains); + CheckBox nav_how_to = findViewById(R.id.nav_how_to); + Button validate = findViewById(R.id.validate); + + nav_news.setChecked(mainMenu.isNav_news()); + nav_list.setChecked(mainMenu.isNav_list()); + nav_scheduled.setChecked(mainMenu.isNav_scheduled()); + nav_archive.setChecked(mainMenu.isNav_archive()); + nav_archive_notifications.setChecked(mainMenu.isNav_archive_notifications()); + nav_peertube.setChecked(mainMenu.isNav_peertube()); + nav_filters.setChecked(mainMenu.isNav_filters()); + nav_who_to_follow.setChecked(mainMenu.isNav_how_to_follow()); + nav_administration.setChecked(mainMenu.isNav_administration()); + nav_blocked.setChecked(mainMenu.isNav_blocked()); + nav_muted.setChecked(mainMenu.isNav_muted()); + nav_blocked_domains.setChecked(mainMenu.isNav_blocked_domains()); + nav_how_to.setChecked(mainMenu.isNav_howto()); + + + validate.setOnClickListener(view -> { + MainMenuItem mainMenuItem = new MainMenuItem(); + nav_news.setChecked(nav_news.isChecked()); + nav_list.setChecked(nav_list.isChecked()); + nav_scheduled.setChecked(nav_scheduled.isChecked()); + nav_archive.setChecked(nav_archive.isChecked()); + nav_archive_notifications.setChecked(nav_archive_notifications.isChecked()); + nav_peertube.setChecked(nav_peertube.isChecked()); + nav_filters.setChecked(nav_filters.isChecked()); + nav_who_to_follow.setChecked(nav_who_to_follow.isChecked()); + nav_administration.setChecked(nav_administration.isChecked()); + nav_blocked.setChecked(nav_blocked.isChecked()); + nav_muted.setChecked(nav_muted.isChecked()); + nav_blocked_domains.setChecked(nav_blocked_domains.isChecked()); + nav_how_to.setChecked(nav_how_to.isChecked()); + MainMenuItem mainMenuItem1 = new MainMenuDAO(getApplicationContext(), db).getMainMenu(); + if( mainMenuItem1 != null){ + new MainMenuDAO(getApplicationContext(), db).updateMenu(mainMenuItem); + }else{ + new MainMenuDAO(getApplicationContext(), db).insertMenu(mainMenuItem); + } + Intent mainActivity = new Intent(HideItemActivity.this, MainActivity.class); + mainActivity.putExtra(Helper.INTENT_ACTION, Helper.REDRAW_MENU); + startActivity(mainActivity); + finish(); + }); + } +} diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index bc7761267..ef8489dea 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -193,6 +193,7 @@ import app.fedilab.android.client.Entities.Attachment; import app.fedilab.android.client.Entities.Card; import app.fedilab.android.client.Entities.Emojis; import app.fedilab.android.client.Entities.Filters; +import app.fedilab.android.client.Entities.MainMenuItem; import app.fedilab.android.client.Entities.Mention; import app.fedilab.android.client.Entities.RemoteInstance; import app.fedilab.android.client.Entities.Status; @@ -200,6 +201,7 @@ import app.fedilab.android.client.Entities.Tag; import app.fedilab.android.client.Entities.TagTimeline; import app.fedilab.android.client.Entities.Version; import app.fedilab.android.client.Tls12SocketFactory; +import app.fedilab.android.sqlite.MainMenuDAO; import app.fedilab.android.sqlite.StatusCacheDAO; import app.fedilab.android.sqlite.TimelineCacheDAO; import es.dmoral.toasty.Toasty; @@ -314,6 +316,7 @@ public class Helper { public static final int RELOAD_MYVIDEOS = 10; public static final int REFRESH_TIMELINE = 11; public static final int BACKUP_NOTIFICATION_INTENT = 12; + public static final int REDRAW_MENU = 13; //Settings public static final int TOOTS_PER_PAGE = 20; public static final int ACCOUNTS_PER_PAGE = 20; @@ -1487,7 +1490,7 @@ public class Helper { }else{ navigationView.getMenu().clear(); navigationView.inflateMenu(R.menu.activity_main_drawer); - hideMenuItem(navigationView.getMenu()); + hideMenuItem(activity, navigationView.getMenu()); arrow.setImageResource(R.drawable.ic_arrow_drop_down); switchLayout(activity); } @@ -1495,7 +1498,7 @@ public class Helper { } - public static void hideMenuItem(Menu menu){ + public static void hideMenuItem(Activity activity, Menu menu){ if( BaseMainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE){ MenuItem itemCom = menu.findItem(R.id.nav_main_com); @@ -1557,6 +1560,48 @@ public class Helper { nav_group.setVisible(true); } + }else{ + SQLiteDatabase db = Sqlite.getInstance(activity, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + MainMenuItem mainMenuItem = new MainMenuDAO(activity, db).getMainMenu(); + if( !mainMenuItem.isNav_list()){ + menu.getItem(R.id.nav_list).setVisible(false); + } + if( !mainMenuItem.isNav_administration()){ + menu.getItem(R.id.nav_administration).setVisible(false); + } + if( !mainMenuItem.isNav_archive()){ + menu.getItem(R.id.nav_archive).setVisible(false); + } + if( !mainMenuItem.isNav_archive_notifications()){ + menu.getItem(R.id.nav_archive_notifications).setVisible(false); + } + if( !mainMenuItem.isNav_blocked()){ + menu.getItem(R.id.nav_blocked).setVisible(false); + } + if( !mainMenuItem.isNav_blocked_domains()){ + menu.getItem(R.id.nav_blocked_domains).setVisible(false); + } + if( !mainMenuItem.isNav_filters()){ + menu.getItem(R.id.nav_filters).setVisible(false); + } + if( !mainMenuItem.isNav_how_to_follow()){ + menu.getItem(R.id.nav_who_to_follow).setVisible(false); + } + if( !mainMenuItem.isNav_howto()){ + menu.getItem(R.id.nav_how_to).setVisible(false); + } + if( !mainMenuItem.isNav_muted()){ + menu.getItem(R.id.nav_muted).setVisible(false); + } + if( !mainMenuItem.isNav_news()){ + menu.getItem(R.id.nav_news).setVisible(false); + } + if( !mainMenuItem.isNav_peertube()){ + menu.getItem(R.id.nav_peertube).setVisible(false); + } + if( !mainMenuItem.isNav_scheduled()){ + menu.getItem(R.id.nav_scheduled).setVisible(false); + } } } if (!BuildConfig.DONATIONS) { @@ -1571,6 +1616,7 @@ public class Helper { } } + /** * Changes the user in shared preferences * @param activity Activity @@ -1584,7 +1630,7 @@ public class Helper { MainActivity.lastNotificationId = null; MainActivity.lastHomeId = null; navigationView.inflateMenu(R.menu.activity_main_drawer); - hideMenuItem(navigationView.getMenu()); + hideMenuItem(activity, navigationView.getMenu()); SQLiteDatabase db = Sqlite.getInstance(activity, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); Account account = new AccountDAO(activity,db).getUniqAccount(userID, instance); diff --git a/app/src/main/java/app/fedilab/android/sqlite/MainMenuDAO.java b/app/src/main/java/app/fedilab/android/sqlite/MainMenuDAO.java index ba9858cb8..0fed2e709 100644 --- a/app/src/main/java/app/fedilab/android/sqlite/MainMenuDAO.java +++ b/app/src/main/java/app/fedilab/android/sqlite/MainMenuDAO.java @@ -49,7 +49,7 @@ public class MainMenuDAO { * @param userId String * @param instance String */ - public void insertInstance(MainMenuItem mainMenuItem, String userId, String instance) { + public void insertMenu(MainMenuItem mainMenuItem, String userId, String instance) { ContentValues values = new ContentValues(); values.put(Sqlite.COL_INSTANCE, instance); values.put(Sqlite.COL_USER_ID, userId); @@ -78,7 +78,7 @@ public class MainMenuDAO { * Insert a menu configuration name in database * @param mainMenuItem MainMenuItem */ - public void insertInstance(MainMenuItem mainMenuItem) { + public void insertMenu(MainMenuItem mainMenuItem) { SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String instance = Helper.getLiveInstance(context); @@ -113,7 +113,7 @@ public class MainMenuDAO { * update menu items in database * @param mainMenuItem MainMenuItem */ - public void updateInstance(MainMenuItem mainMenuItem, String userId, String instance) { + public void updateMenu(MainMenuItem mainMenuItem, String userId, String instance) { ContentValues values = new ContentValues(); values.put(Sqlite.COL_INSTANCE, instance); values.put(Sqlite.COL_USER_ID, userId); @@ -141,7 +141,7 @@ public class MainMenuDAO { * update menu items in database * @param mainMenuItem MainMenuItem */ - public void updateInstance(MainMenuItem mainMenuItem) { + public void updateMenu(MainMenuItem mainMenuItem) { ContentValues values = new ContentValues(); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); @@ -184,7 +184,7 @@ public class MainMenuDAO { Cursor c = db.query(Sqlite.TABLE_MAIN_MENU_ITEMS, null, Sqlite.COL_INSTANCE + " = '" + instance+ "' AND " + Sqlite.COL_USER_ID + " = '" + userId+ "'", null, null, null, null, "1"); return cursorToMainMenu(c); } catch (Exception e) { - return null; + return new MainMenuItem(); } } @@ -200,7 +200,7 @@ public class MainMenuDAO { Cursor c = db.query(Sqlite.TABLE_MAIN_MENU_ITEMS, null, Sqlite.COL_INSTANCE + " = '" + instance+ "' AND " + Sqlite.COL_USER_ID + " = '" + userId+ "'", null, null, null, null, "1"); return cursorToMainMenu(c); } catch (Exception e) { - return null; + return new MainMenuItem(); } } diff --git a/app/src/main/res/layout/activity_hide_menu_items.xml b/app/src/main/res/layout/activity_hide_menu_items.xml new file mode 100644 index 000000000..d2c2bfd38 --- /dev/null +++ b/app/src/main/res/layout/activity_hide_menu_items.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +