mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Converted welcome activity / pager to kotlin
This commit is contained in:
parent
3bd0ec4466
commit
c5b7366713
6 changed files with 152 additions and 190 deletions
|
|
@ -1,109 +0,0 @@
|
||||||
package fr.free.nrw.commons;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import fr.free.nrw.commons.databinding.ActivityWelcomeBinding;
|
|
||||||
import fr.free.nrw.commons.databinding.PopupForCopyrightBinding;
|
|
||||||
import fr.free.nrw.commons.quiz.QuizActivity;
|
|
||||||
import fr.free.nrw.commons.theme.BaseActivity;
|
|
||||||
import fr.free.nrw.commons.utils.ConfigUtils;
|
|
||||||
|
|
||||||
public class WelcomeActivity extends BaseActivity {
|
|
||||||
|
|
||||||
private ActivityWelcomeBinding binding;
|
|
||||||
private PopupForCopyrightBinding copyrightBinding;
|
|
||||||
|
|
||||||
private final WelcomePagerAdapter adapter = new WelcomePagerAdapter();
|
|
||||||
private boolean isQuiz;
|
|
||||||
private AlertDialog.Builder dialogBuilder;
|
|
||||||
private AlertDialog dialog;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialises exiting fields and dependencies
|
|
||||||
*
|
|
||||||
* @param savedInstanceState WelcomeActivity bundled data
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onCreate(final Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
binding = ActivityWelcomeBinding.inflate(getLayoutInflater());
|
|
||||||
final View view = binding.getRoot();
|
|
||||||
setContentView(view);
|
|
||||||
|
|
||||||
if (getIntent() != null) {
|
|
||||||
final Bundle bundle = getIntent().getExtras();
|
|
||||||
if (bundle != null) {
|
|
||||||
isQuiz = bundle.getBoolean("isQuiz");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
isQuiz = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable skip button if beta flavor
|
|
||||||
if (ConfigUtils.isBetaFlavour()) {
|
|
||||||
binding.finishTutorialButton.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
dialogBuilder = new AlertDialog.Builder(this);
|
|
||||||
copyrightBinding = PopupForCopyrightBinding.inflate(getLayoutInflater());
|
|
||||||
final View contactPopupView = copyrightBinding.getRoot();
|
|
||||||
dialogBuilder.setView(contactPopupView);
|
|
||||||
dialogBuilder.setCancelable(false);
|
|
||||||
dialog = dialogBuilder.create();
|
|
||||||
dialog.show();
|
|
||||||
|
|
||||||
copyrightBinding.buttonOk.setOnClickListener(v -> dialog.dismiss());
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.welcomePager.setAdapter(adapter);
|
|
||||||
binding.welcomePagerIndicator.setViewPager(binding.welcomePager);
|
|
||||||
|
|
||||||
binding.finishTutorialButton.setOnClickListener(v -> finishTutorial());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* References WelcomePageAdapter to null before the activity is destroyed
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
if (isQuiz) {
|
|
||||||
final Intent i = new Intent(this, QuizActivity.class);
|
|
||||||
startActivity(i);
|
|
||||||
}
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a way to change current activity to WelcomeActivity
|
|
||||||
*
|
|
||||||
* @param context Activity context
|
|
||||||
*/
|
|
||||||
public static void startYourself(final Context context) {
|
|
||||||
final Intent welcomeIntent = new Intent(context, WelcomeActivity.class);
|
|
||||||
context.startActivity(welcomeIntent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override onBackPressed() to go to previous tutorial 'pages' if not on first page
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
if (binding.welcomePager.getCurrentItem() != 0) {
|
|
||||||
binding.welcomePager.setCurrentItem(binding.welcomePager.getCurrentItem() - 1, true);
|
|
||||||
} else {
|
|
||||||
if (defaultKvStore.getBoolean("firstrun", true)) {
|
|
||||||
finishAffinity();
|
|
||||||
} else {
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void finishTutorial() {
|
|
||||||
defaultKvStore.putBoolean("firstrun", false);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
78
app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt
Normal file
78
app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
package fr.free.nrw.commons
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import fr.free.nrw.commons.databinding.ActivityWelcomeBinding
|
||||||
|
import fr.free.nrw.commons.databinding.PopupForCopyrightBinding
|
||||||
|
import fr.free.nrw.commons.quiz.QuizActivity
|
||||||
|
import fr.free.nrw.commons.theme.BaseActivity
|
||||||
|
import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
|
||||||
|
|
||||||
|
class WelcomeActivity : BaseActivity() {
|
||||||
|
private var binding: ActivityWelcomeBinding? = null
|
||||||
|
private var isQuiz = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialises exiting fields and dependencies
|
||||||
|
*
|
||||||
|
* @param savedInstanceState WelcomeActivity bundled data
|
||||||
|
*/
|
||||||
|
public override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
binding = ActivityWelcomeBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding!!.root)
|
||||||
|
|
||||||
|
isQuiz = intent?.extras?.getBoolean("isQuiz", false) ?: false
|
||||||
|
|
||||||
|
// Enable skip button if beta flavor
|
||||||
|
if (isBetaFlavour) {
|
||||||
|
binding!!.finishTutorialButton.visibility = View.VISIBLE
|
||||||
|
|
||||||
|
val copyrightBinding = PopupForCopyrightBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
|
val dialog = AlertDialog.Builder(this)
|
||||||
|
.setView(copyrightBinding.root)
|
||||||
|
.setCancelable(false)
|
||||||
|
.create()
|
||||||
|
dialog.show()
|
||||||
|
|
||||||
|
copyrightBinding.buttonOk.setOnClickListener { v: View? -> dialog.dismiss() }
|
||||||
|
}
|
||||||
|
|
||||||
|
val adapter = WelcomePagerAdapter()
|
||||||
|
binding!!.welcomePager.adapter = adapter
|
||||||
|
binding!!.welcomePagerIndicator.setViewPager(binding!!.welcomePager)
|
||||||
|
binding!!.finishTutorialButton.setOnClickListener { v: View? -> finishTutorial() }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override fun onDestroy() {
|
||||||
|
if (isQuiz) {
|
||||||
|
startActivity(Intent(this, QuizActivity::class.java))
|
||||||
|
}
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBackPressed() {
|
||||||
|
if (binding!!.welcomePager.currentItem != 0) {
|
||||||
|
binding!!.welcomePager.setCurrentItem(binding!!.welcomePager.currentItem - 1, true)
|
||||||
|
} else {
|
||||||
|
if (defaultKvStore.getBoolean("firstrun", true)) {
|
||||||
|
finishAffinity()
|
||||||
|
} else {
|
||||||
|
super.onBackPressed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun finishTutorial() {
|
||||||
|
defaultKvStore.putBoolean("firstrun", false)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun Context.startWelcome() {
|
||||||
|
startActivity(Intent(this, WelcomeActivity::class.java))
|
||||||
|
}
|
||||||
|
|
@ -1,77 +0,0 @@
|
||||||
package fr.free.nrw.commons;
|
|
||||||
|
|
||||||
import static fr.free.nrw.commons.utils.UrlUtilsKt.handleWebUrl;
|
|
||||||
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.viewpager.widget.PagerAdapter;
|
|
||||||
import fr.free.nrw.commons.utils.UnderlineUtils;
|
|
||||||
|
|
||||||
public class WelcomePagerAdapter extends PagerAdapter {
|
|
||||||
private static final int[] PAGE_LAYOUTS = new int[]{
|
|
||||||
R.layout.welcome_wikipedia,
|
|
||||||
R.layout.welcome_do_upload,
|
|
||||||
R.layout.welcome_dont_upload,
|
|
||||||
R.layout.welcome_image_example,
|
|
||||||
R.layout.welcome_final
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets total number of layouts
|
|
||||||
* @return Number of layouts
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int getCount() {
|
|
||||||
return PAGE_LAYOUTS.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compares given view with provided object
|
|
||||||
* @param view Adapter view
|
|
||||||
* @param object Adapter object
|
|
||||||
* @return Equality between view and object
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean isViewFromObject(View view, Object object) {
|
|
||||||
return (view == object);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object instantiateItem(ViewGroup container, int position) {
|
|
||||||
LayoutInflater inflater = LayoutInflater.from(container.getContext());
|
|
||||||
ViewGroup layout = (ViewGroup) inflater.inflate(PAGE_LAYOUTS[position], container, false);
|
|
||||||
|
|
||||||
// If final page
|
|
||||||
if (position == PAGE_LAYOUTS.length - 1) {
|
|
||||||
// Add link to more information
|
|
||||||
TextView moreInfo = layout.findViewById(R.id.welcomeInfo);
|
|
||||||
UnderlineUtils.setUnderlinedText(moreInfo, R.string.welcome_help_button_text);
|
|
||||||
moreInfo.setOnClickListener(view -> handleWebUrl(
|
|
||||||
container.getContext(),
|
|
||||||
Uri.parse("https://commons.wikimedia.org/wiki/Help:Contents")
|
|
||||||
));
|
|
||||||
|
|
||||||
// Handle click of finishTutorialButton ("YES!" button) inside layout
|
|
||||||
layout.findViewById(R.id.finishTutorialButton)
|
|
||||||
.setOnClickListener(view -> ((WelcomeActivity) container.getContext()).finishTutorial());
|
|
||||||
}
|
|
||||||
|
|
||||||
container.addView(layout);
|
|
||||||
return layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a way to remove an item from container
|
|
||||||
* @param container Adapter view group container
|
|
||||||
* @param position Index of item
|
|
||||||
* @param obj Adapter object
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void destroyItem(ViewGroup container, int position, Object obj) {
|
|
||||||
container.removeView((View) obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
70
app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.kt
Normal file
70
app/src/main/java/fr/free/nrw/commons/WelcomePagerAdapter.kt
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
package fr.free.nrw.commons
|
||||||
|
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import androidx.viewpager.widget.PagerAdapter
|
||||||
|
import fr.free.nrw.commons.utils.UnderlineUtils.setUnderlinedText
|
||||||
|
import fr.free.nrw.commons.utils.handleWebUrl
|
||||||
|
|
||||||
|
class WelcomePagerAdapter : PagerAdapter() {
|
||||||
|
/**
|
||||||
|
* Gets total number of layouts
|
||||||
|
* @return Number of layouts
|
||||||
|
*/
|
||||||
|
override fun getCount(): Int = PAGE_LAYOUTS.size
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares given view with provided object
|
||||||
|
* @param view Adapter view
|
||||||
|
* @param obj Adapter object
|
||||||
|
* @return Equality between view and object
|
||||||
|
*/
|
||||||
|
override fun isViewFromObject(view: View, obj: Any): Boolean = (view === obj)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a way to remove an item from container
|
||||||
|
* @param container Adapter view group container
|
||||||
|
* @param position Index of item
|
||||||
|
* @param obj Adapter object
|
||||||
|
*/
|
||||||
|
override fun destroyItem(container: ViewGroup, position: Int, obj: Any) =
|
||||||
|
container.removeView(obj as View)
|
||||||
|
|
||||||
|
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||||
|
val inflater = LayoutInflater.from(container.context)
|
||||||
|
val layout = inflater.inflate(PAGE_LAYOUTS[position], container, false) as ViewGroup
|
||||||
|
|
||||||
|
// If final page
|
||||||
|
if (position == PAGE_LAYOUTS.size - 1) {
|
||||||
|
// Add link to more information
|
||||||
|
val moreInfo = layout.findViewById<TextView>(R.id.welcomeInfo)
|
||||||
|
setUnderlinedText(moreInfo, R.string.welcome_help_button_text)
|
||||||
|
moreInfo.setOnClickListener {
|
||||||
|
handleWebUrl(
|
||||||
|
container.context,
|
||||||
|
"https://commons.wikimedia.org/wiki/Help:Contents".toUri()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle click of finishTutorialButton ("YES!" button) inside layout
|
||||||
|
layout.findViewById<View>(R.id.finishTutorialButton)
|
||||||
|
.setOnClickListener { view: View? -> (container.context as WelcomeActivity).finishTutorial() }
|
||||||
|
}
|
||||||
|
|
||||||
|
container.addView(layout)
|
||||||
|
return layout
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val PAGE_LAYOUTS = intArrayOf(
|
||||||
|
R.layout.welcome_wikipedia,
|
||||||
|
R.layout.welcome_do_upload,
|
||||||
|
R.layout.welcome_dont_upload,
|
||||||
|
R.layout.welcome_image_example,
|
||||||
|
R.layout.welcome_final
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,7 +12,6 @@ import androidx.fragment.app.FragmentManager
|
||||||
import androidx.work.ExistingWorkPolicy
|
import androidx.work.ExistingWorkPolicy
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import fr.free.nrw.commons.R
|
import fr.free.nrw.commons.R
|
||||||
import fr.free.nrw.commons.WelcomeActivity
|
|
||||||
import fr.free.nrw.commons.auth.SessionManager
|
import fr.free.nrw.commons.auth.SessionManager
|
||||||
import fr.free.nrw.commons.bookmarks.BookmarkFragment
|
import fr.free.nrw.commons.bookmarks.BookmarkFragment
|
||||||
import fr.free.nrw.commons.contributions.ContributionsFragment.Companion.newInstance
|
import fr.free.nrw.commons.contributions.ContributionsFragment.Companion.newInstance
|
||||||
|
|
@ -33,6 +32,7 @@ import fr.free.nrw.commons.notification.NotificationActivity.Companion.startYour
|
||||||
import fr.free.nrw.commons.notification.NotificationController
|
import fr.free.nrw.commons.notification.NotificationController
|
||||||
import fr.free.nrw.commons.quiz.QuizChecker
|
import fr.free.nrw.commons.quiz.QuizChecker
|
||||||
import fr.free.nrw.commons.settings.SettingsFragment
|
import fr.free.nrw.commons.settings.SettingsFragment
|
||||||
|
import fr.free.nrw.commons.startWelcome
|
||||||
import fr.free.nrw.commons.theme.BaseActivity
|
import fr.free.nrw.commons.theme.BaseActivity
|
||||||
import fr.free.nrw.commons.upload.UploadProgressActivity
|
import fr.free.nrw.commons.upload.UploadProgressActivity
|
||||||
import fr.free.nrw.commons.upload.worker.WorkRequestHelper.Companion.makeOneTimeWorkRequest
|
import fr.free.nrw.commons.upload.worker.WorkRequestHelper.Companion.makeOneTimeWorkRequest
|
||||||
|
|
@ -517,7 +517,7 @@ after opening the app.
|
||||||
(!applicationKvStore!!.getBoolean("login_skipped"))
|
(!applicationKvStore!!.getBoolean("login_skipped"))
|
||||||
) {
|
) {
|
||||||
defaultKvStore.putBoolean("inAppCameraFirstRun", true)
|
defaultKvStore.putBoolean("inAppCameraFirstRun", true)
|
||||||
WelcomeActivity.startYourself(this)
|
startWelcome()
|
||||||
}
|
}
|
||||||
|
|
||||||
retryAllFailedUploads()
|
retryAllFailedUploads()
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import fr.free.nrw.commons.BuildConfig
|
||||||
import fr.free.nrw.commons.CommonsApplication
|
import fr.free.nrw.commons.CommonsApplication
|
||||||
import fr.free.nrw.commons.CommonsApplication.ActivityLogoutListener
|
import fr.free.nrw.commons.CommonsApplication.ActivityLogoutListener
|
||||||
import fr.free.nrw.commons.R
|
import fr.free.nrw.commons.R
|
||||||
import fr.free.nrw.commons.WelcomeActivity
|
|
||||||
import fr.free.nrw.commons.actions.PageEditClient
|
import fr.free.nrw.commons.actions.PageEditClient
|
||||||
import fr.free.nrw.commons.databinding.FragmentMoreBottomSheetBinding
|
import fr.free.nrw.commons.databinding.FragmentMoreBottomSheetBinding
|
||||||
import fr.free.nrw.commons.di.ApplicationlessInjection
|
import fr.free.nrw.commons.di.ApplicationlessInjection
|
||||||
|
|
@ -32,6 +31,7 @@ import fr.free.nrw.commons.logging.CommonsLogSender
|
||||||
import fr.free.nrw.commons.profile.ProfileActivity
|
import fr.free.nrw.commons.profile.ProfileActivity
|
||||||
import fr.free.nrw.commons.review.ReviewActivity
|
import fr.free.nrw.commons.review.ReviewActivity
|
||||||
import fr.free.nrw.commons.settings.SettingsActivity
|
import fr.free.nrw.commons.settings.SettingsActivity
|
||||||
|
import fr.free.nrw.commons.startWelcome
|
||||||
import io.reactivex.Single
|
import io.reactivex.Single
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
|
@ -241,7 +241,7 @@ class MoreBottomSheetFragment : BottomSheetDialogFragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onTutorialClicked() {
|
fun onTutorialClicked() {
|
||||||
WelcomeActivity.startYourself(requireActivity())
|
requireContext().startWelcome()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onSettingsClicked() {
|
fun onSettingsClicked() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue