From e7757443af6d4c53abd7b3dfb0f253b482dd0eeb Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Mon, 26 Apr 2021 19:32:46 +0200 Subject: #865 Display avatar of the current user account in the top right --- .../owncloudnewsreader/NewsReaderListActivity.java | 40 ++++++++++++++++++++-- .../owncloudnewsreader/NewsReaderListFragment.java | 39 ++------------------- .../owncloudnewsreader/SettingsActivity.java | 30 ---------------- .../owncloudnewsreader/SettingsFragment.java | 10 +----- 4 files changed, 41 insertions(+), 78 deletions(-) (limited to 'News-Android-App/src/main/java') diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java index 573eb86b..2744399b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java @@ -72,6 +72,9 @@ import com.nextcloud.android.sso.exceptions.SSOException; import com.nextcloud.android.sso.exceptions.TokenMismatchException; import com.nextcloud.android.sso.helper.SingleAccountHelper; import com.nextcloud.android.sso.ui.UiExceptionManager; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -100,6 +103,7 @@ import de.luhmer.owncloudnewsreader.events.podcast.FeedPanelSlideEvent; import de.luhmer.owncloudnewsreader.helper.DatabaseUtils; import de.luhmer.owncloudnewsreader.helper.ThemeChooser; import de.luhmer.owncloudnewsreader.helper.ThemeUtils; +import de.luhmer.owncloudnewsreader.model.OcsUser; import de.luhmer.owncloudnewsreader.reader.nextcloud.RssItemObservable; import de.luhmer.owncloudnewsreader.services.DownloadImagesService; import de.luhmer.owncloudnewsreader.services.DownloadWebPageService; @@ -120,6 +124,7 @@ import static android.Manifest.permission.ACCESS_FINE_LOCATION; import static androidx.annotation.VisibleForTesting.PROTECTED; import static de.luhmer.owncloudnewsreader.LoginDialogActivity.RESULT_LOGIN; import static de.luhmer.owncloudnewsreader.LoginDialogActivity.ShowAlertDialog; +import static de.luhmer.owncloudnewsreader.SettingsActivity.PREF_SERVER_SETTINGS; /** * An activity representing a list of NewsReader. This activity has different @@ -226,6 +231,11 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements initAccountManager(); + binding.toolbarLayout.avatar.setVisibility(View.VISIBLE); + binding.toolbarLayout.avatar.setOnClickListener((v) -> { + startActivityForResult(new Intent(this, LoginDialogActivity.class), RESULT_LOGIN); + }); + // Init config --> if nothing is configured start the login dialog. if (!isUserLoggedIn()) { startLoginActivity(); @@ -570,6 +580,28 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements startDialogFragment(idFeed, isFolder); } + @Override + public void onUserInfoUpdated(OcsUser userInfo) { + final int placeHolder = R.mipmap.ic_launcher; + DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder() + .displayer(new CircleBitmapDisplayer()) + .showImageOnLoading(placeHolder) + .showImageForEmptyUri(placeHolder) + .showImageOnFail(placeHolder) + .cacheOnDisk(true) + .cacheInMemory(true) + .build(); + + if(userInfo.getId() != null) { + String mOc_root_path = mPrefs.getString(SettingsActivity.EDT_OWNCLOUDROOTPATH_STRING, null); + String avatarUrl = mOc_root_path + "/index.php/avatar/" + Uri.encode(userInfo.getId()) + "/64"; + ImageLoader.getInstance().displayImage(avatarUrl, binding.toolbarLayout.avatar, displayImageOptions); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + binding.toolbarLayout.avatar.setTooltipText(userInfo.getDisplayName()); + } + } + } + @Override public void onChildItemLongClicked(long idFeed) { startDialogFragment(idFeed, false); @@ -920,9 +952,14 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements getSlidingListFragment().ListViewNotifyDataSetChanged(); } + if (requestCode == RESULT_LOGIN) { + Intent intent = getIntent().putExtra(PREF_SERVER_SETTINGS, true); + setResult(RESULT_OK, intent); + } + if(requestCode == RESULT_SETTINGS) { // Extra is set if user entered/modified server settings - if (data == null || data.getBooleanExtra(SettingsActivity.PREF_SERVER_SETTINGS,false)) { + if (data == null || data.getBooleanExtra(PREF_SERVER_SETTINGS,false)) { resetUiAndStartSync(); } else { //Update settings of image Loader @@ -1025,7 +1062,6 @@ public class NewsReaderListActivity extends PodcastFragmentActivity implements } private void resetUiAndStartSync() { - getSlidingListFragment().loadOwncloudOrNextcloudBanner(); getSlidingListFragment().reloadAdapter(); updateCurrentRssView(); startSync(); diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java index c9fccd9e..0d6112de 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListFragment.java @@ -24,7 +24,6 @@ package de.luhmer.owncloudnewsreader; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.net.Uri; import android.os.Bundle; import android.util.Base64; import android.util.Log; @@ -35,16 +34,11 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; -import android.widget.ImageView; -import android.widget.TextView; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import com.google.android.material.navigation.NavigationView; -import com.nostra13.universalimageloader.core.DisplayImageOptions; -import com.nostra13.universalimageloader.core.ImageLoader; -import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -134,6 +128,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM void onTopItemClicked(long idFeed, boolean isFolder, Long onTopItemClicked); void onChildItemLongClicked(long idFeed); void onTopItemLongClicked(long idFeed, boolean isFolder); + void onUserInfoUpdated(OcsUser userInfo); } /** @@ -154,8 +149,6 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM Bundle savedInstanceState) { binding = FragmentNewsreaderListBinding.inflate(requireActivity().getLayoutInflater(), container, false); - loadOwncloudOrNextcloudBanner(); - lvAdapter = new SubscriptionExpandableListAdapter(getActivity(), new DatabaseConnectionOrm(getActivity()), binding.expandableListView, mPrefs); lvAdapter.setHandlerListener(expListTextClickedListener); @@ -203,13 +196,6 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM mCallbacks = null; } - protected void loadOwncloudOrNextcloudBanner() { - if(!Constants.isNextCloud(mPrefs)) { - // Set ownCloud view - binding.headerView.setBackgroundResource(R.drawable.left_drawer_header_background); - } - } - /** * Cares about settings items in news list drawer. * - Binds settings, shown at bottom of drawer @@ -368,12 +354,6 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM // return if app is not setup yet.. return; } - String mUsername = mPrefs.getString(SettingsActivity.EDT_USERNAME_STRING, null); - String mOc_root_path = mPrefs.getString(SettingsActivity.EDT_OWNCLOUDROOTPATH_STRING, null); - String mOc_root_path_without_protocol = mOc_root_path.replace("http://", "").replace("https://", ""); //Remove http:// or https:// - - binding.userTextView.setText(mUsername); - binding.urlTextView.setText(mOc_root_path_without_protocol); String uInfo = mPrefs.getString(USER_INFO_STRING, null); if(uInfo == null) { @@ -382,22 +362,7 @@ public class NewsReaderListFragment extends Fragment implements OnCreateContextM try { OcsUser userInfo = (OcsUser) fromString(uInfo); - if (userInfo.getDisplayName() != null) - binding.userTextView.setText(userInfo.getDisplayName()); - final int placeHolder = R.mipmap.ic_launcher; - DisplayImageOptions displayImageOptions = new DisplayImageOptions.Builder() - .displayer(new CircleBitmapDisplayer()) - .showImageOnLoading(placeHolder) - .showImageForEmptyUri(placeHolder) - .showImageOnFail(placeHolder) - .cacheOnDisk(true) - .cacheInMemory(true) - .build(); - - if(userInfo.getId() != null) { - String avatarUrl = mOc_root_path + "/index.php/avatar/" + Uri.encode(userInfo.getId()) + "/64"; - ImageLoader.getInstance().displayImage(avatarUrl, binding.headerLogo, displayImageOptions); - } + mCallbacks.onUserInfoUpdated(userInfo); } catch (Exception ex) { ex.printStackTrace(); } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java index 7b4bce4f..e46dee5b 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsActivity.java @@ -156,34 +156,4 @@ public class SettingsActivity extends AppCompatActivity { ); setResult(RESULT_OK,intent); } - - /** - * Used to notify Activity, that server settings were touched by user. - * - * If server settings were touched, a result is provided by intent with corresponding request code. - * No notify the calling activity that server settings were touched, a new extra is put to - * response intent: PREF_SERVER_SETTINGS is set to true. - * - * Result has to be handled by receiving activity. - * - * @param requestCode - * @param resultCode - * @param data - */ - @Override - protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == RESULT_LOGIN) { - Intent intent = getIntent().putExtra(PREF_SERVER_SETTINGS, true); - setResult(RESULT_OK, intent); - } - } - - //@Override - public boolean onIsMultiPane() { - return this.getResources().getBoolean(R.bool.isTablet); - } - - } diff --git a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java index 9707c4aa..e7b7dc23 100644 --- a/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java +++ b/News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/SettingsFragment.java @@ -287,18 +287,10 @@ public class SettingsFragment extends PreferenceFragmentCompat { checkForUnsycedChangesInDatabaseAndResetDatabase(prefFrag.getActivity()); return true; }); - - Preference serverSettings = prefFrag.findPreference(PREF_SERVER_SETTINGS); - serverSettings.setOnPreferenceClickListener(preference -> { - Intent loginIntent = new Intent(getActivity(), LoginDialogActivity.class); - getActivity().startActivityForResult(loginIntent, RESULT_LOGIN); - return true; - }); } - private void bindNotificationPreferences(PreferenceFragmentCompat prefFrag) - { + private void bindNotificationPreferences(PreferenceFragmentCompat prefFrag) { bindPreferenceBooleanToValue(prefFrag.findPreference(CB_SHOW_NOTIFICATION_NEW_ARTICLES_STRING)); } -- cgit v1.2.3