From dbff6c11ac630d865ecc2b67480304f3b1673839 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 3 May 2021 17:01:48 +0530 Subject: [PATCH 01/18] Apps: SmallApplication*: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../application/SmallApplicationViewHolder.kt | 19 +++++++------------ .../common/SmallApplicationListAdapter.kt | 3 ++- .../layout/small_application_list_item.xml | 3 ++- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt b/app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt index 7292b819d..00db46c85 100644 --- a/app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt +++ b/app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt @@ -22,12 +22,8 @@ import android.app.Activity import android.graphics.Bitmap import android.graphics.Color import android.view.Gravity -import android.view.View import android.view.animation.AlphaAnimation import android.view.animation.Animation -import android.widget.Button -import android.widget.ImageView -import android.widget.TextView import androidx.appcompat.content.res.AppCompatResources import androidx.recyclerview.widget.RecyclerView import com.google.android.material.snackbar.Snackbar @@ -39,25 +35,24 @@ import foundation.e.apps.application.model.State import foundation.e.apps.application.model.data.BasicData import foundation.e.apps.application.model.data.PwasBasicData import foundation.e.apps.application.viewmodel.ApplicationViewModel +import foundation.e.apps.databinding.SmallApplicationListItemBinding import foundation.e.apps.utils.Common import foundation.e.apps.utils.Common.toMiB import foundation.e.apps.utils.Error import foundation.e.apps.utils.Execute -import kotlinx.android.synthetic.main.application_list_item.view.* -import kotlinx.android.synthetic.main.simple_install_button_layout.view.* -class SmallApplicationViewHolder(private val activity: Activity, private val view: View) : - RecyclerView.ViewHolder(view), +class SmallApplicationViewHolder(private val activity: Activity, binding: SmallApplicationListItemBinding) : + RecyclerView.ViewHolder(binding.root), ApplicationStateListener, Downloader.DownloadProgressCallback, BasicData.IconLoaderCallback, PwasBasicData.IconLoaderCallback{ - - private val icon: ImageView = view.app_icon - private val title: TextView = view.app_title - private val installButton: Button = view.app_install + private val view = binding.root + private val icon = binding.appIcon + private val title = binding.appTitle + private val installButton = binding.simpleInstallButtonLayout.appInstall private var application: Application? = null private val applicationViewModel = ApplicationViewModel() diff --git a/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt b/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt index fcf47b779..8f7a995e2 100644 --- a/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt +++ b/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt @@ -24,11 +24,12 @@ import androidx.recyclerview.widget.RecyclerView import foundation.e.apps.R import foundation.e.apps.application.SmallApplicationViewHolder import foundation.e.apps.application.model.Application +import foundation.e.apps.databinding.SmallApplicationListItemBinding class SmallApplicationListAdapter(private val activity: Activity, private val applicationList: List) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SmallApplicationViewHolder { - val listItemContainer = LayoutInflater.from(parent.context).inflate(R.layout.small_application_list_item, parent, false) + val listItemContainer = SmallApplicationListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) return SmallApplicationViewHolder(activity, listItemContainer) } diff --git a/app/src/main/res/layout/small_application_list_item.xml b/app/src/main/res/layout/small_application_list_item.xml index ffee746c0..d759d811d 100644 --- a/app/src/main/res/layout/small_application_list_item.xml +++ b/app/src/main/res/layout/small_application_list_item.xml @@ -74,6 +74,7 @@ + android:layout_below="@+id/simple_install_button_layout"/> -- GitLab From 7111f3a5a2de90bcff6abfecf81c8d82f583aca9 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 3 May 2021 17:48:15 +0530 Subject: [PATCH 02/18] Apps: category: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../categories/category/CategoryActivity.kt | 35 ++++++++++--------- app/src/main/res/layout/activity_category.xml | 1 + 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/categories/category/CategoryActivity.kt b/app/src/main/java/foundation/e/apps/categories/category/CategoryActivity.kt index 085b0907a..9418106cb 100644 --- a/app/src/main/java/foundation/e/apps/categories/category/CategoryActivity.kt +++ b/app/src/main/java/foundation/e/apps/categories/category/CategoryActivity.kt @@ -22,12 +22,8 @@ import android.graphics.Color import android.os.Bundle import android.view.MenuItem import android.view.View -import android.widget.LinearLayout import android.widget.ProgressBar -import android.widget.RelativeLayout -import android.widget.TextView import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager @@ -41,13 +37,14 @@ import foundation.e.apps.applicationmanager.ApplicationManagerServiceConnectionC import foundation.e.apps.categories.category.viewmodel.CategoryViewModel import foundation.e.apps.categories.model.Category import foundation.e.apps.common.ApplicationListAdapter +import foundation.e.apps.databinding.ActivityCategoryBinding import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Constants.CATEGORY_KEY -import kotlinx.android.synthetic.main.activity_category.* -import kotlinx.android.synthetic.main.error_layout.* class CategoryActivity : AppCompatActivity(), ApplicationManagerServiceConnectionCallback { + private lateinit var binding: ActivityCategoryBinding + private lateinit var category: Category private lateinit var categoryViewModel: CategoryViewModel private lateinit var recyclerView: RecyclerView @@ -60,26 +57,30 @@ class CategoryActivity : AppCompatActivity(), ApplicationManagerServiceConnectio override fun onCreate(savedInstanceState: Bundle?) { + binding = ActivityCategoryBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) - setContentView(R.layout.activity_category) + setContentView(binding.root) getAccentColor() - val toolbar = findViewById(R.id.toolbar) + val toolbar = binding.toolbar setSupportActionBar(toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) category = intent.getSerializableExtra(CATEGORY_KEY) as Category supportActionBar?.title = category.getTitle() categoryViewModel = ViewModelProvider(this).get(CategoryViewModel::class.java) - recyclerView = findViewById(R.id.app_list) - val loadMoreContainer = findViewById(R.id.load_more_container) - progressBar = findViewById(R.id.progress_bar) - val errorContainer = findViewById(R.id.error_container) - val errorDescription = findViewById(R.id.error_description) + + // Activity variables + recyclerView = binding.appList + progressBar = binding.progressBar + val loadMoreContainer = binding.loadMoreContainer + val errorContainer = binding.errorLayout.errorContainer + val errorDescription = binding.errorLayout.errorDescription + val errorResolve = binding.errorLayout.errorResolve //set accent color to Error button (Retry ) - findViewById(R.id.error_resolve).setTextColor(Color.parseColor("#ffffff")) - findViewById(R.id.error_resolve).setBackgroundColor(accentColorOS) + errorResolve.setTextColor(Color.parseColor("#ffffff")) + errorResolve.setBackgroundColor(accentColorOS) // Initialise UI elements @@ -102,7 +103,7 @@ class CategoryActivity : AppCompatActivity(), ApplicationManagerServiceConnectio }) progressBar.visibility = View.VISIBLE errorContainer.visibility = View.GONE - findViewById(R.id.error_resolve).setOnClickListener { + errorResolve.setOnClickListener { loadMoreContainer.visibility = View.GONE progressBar.visibility = View.VISIBLE categoryViewModel.loadApplications(this) @@ -166,7 +167,7 @@ class CategoryActivity : AppCompatActivity(), ApplicationManagerServiceConnectio super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == Constants.STORAGE_PERMISSION_REQUEST_CODE && grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_DENIED) { - Snackbar.make(container, R.string.error_storage_permission_denied, + Snackbar.make(binding.container, R.string.error_storage_permission_denied, Snackbar.LENGTH_LONG).show() } } diff --git a/app/src/main/res/layout/activity_category.xml b/app/src/main/res/layout/activity_category.xml index 54f1af054..33096712a 100644 --- a/app/src/main/res/layout/activity_category.xml +++ b/app/src/main/res/layout/activity_category.xml @@ -57,6 +57,7 @@ Date: Mon, 3 May 2021 17:53:08 +0530 Subject: [PATCH 03/18] home: ImageCarouselAdapter: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../foundation/e/apps/home/ImageCarouselAdapter.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/home/ImageCarouselAdapter.kt b/app/src/main/java/foundation/e/apps/home/ImageCarouselAdapter.kt index ac5ebf7bb..dc84b854f 100644 --- a/app/src/main/java/foundation/e/apps/home/ImageCarouselAdapter.kt +++ b/app/src/main/java/foundation/e/apps/home/ImageCarouselAdapter.kt @@ -29,13 +29,12 @@ import androidx.viewpager.widget.PagerAdapter import foundation.e.apps.MainActivity.Companion.mActivity import foundation.e.apps.R import foundation.e.apps.application.viewmodel.ApplicationViewModel +import foundation.e.apps.databinding.ImageCarouselItemBinding import foundation.e.apps.home.model.BannerApplication -import kotlinx.android.synthetic.main.image_carousel_item.view.* -class ImageCarouselAdapter(context: Context, private val bannerApplications: ArrayList) : PagerAdapter() { +class ImageCarouselAdapter(private val context: Context, private val bannerApplications: ArrayList) : PagerAdapter() { - private val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater private val applicationViewModel = ApplicationViewModel() override fun isViewFromObject(view: View, obj: Any): Boolean { @@ -47,8 +46,9 @@ class ImageCarouselAdapter(context: Context, private val bannerApplications: Arr } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = layoutInflater.inflate(R.layout.image_carousel_item, container, false) - val wideImage = view.image + val binding = ImageCarouselItemBinding.inflate(LayoutInflater.from(context), container, false) + val view = binding.root + val wideImage = binding.image val image = getRoundedCornerBitmap(bannerApplications[position].image,mActivity) wideImage.setImageBitmap(image) wideImage.setOnClickListener { -- GitLab From 296faf72497b5396375690e72de8b04939dac635 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 3 May 2021 18:03:21 +0530 Subject: [PATCH 04/18] apps: application: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../ApplicationDescriptionActivity.kt | 13 +++---- .../apps/application/ApplicationViewHolder.kt | 34 ++++++++----------- .../e/apps/common/ApplicationListAdapter.kt | 4 +-- .../main/res/layout/application_list_item.xml | 1 + 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationDescriptionActivity.kt b/app/src/main/java/foundation/e/apps/application/ApplicationDescriptionActivity.kt index 2f627601d..fd2e99e28 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationDescriptionActivity.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationDescriptionActivity.kt @@ -21,25 +21,26 @@ import android.os.Bundle import android.text.util.Linkify import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.Toolbar import foundation.e.apps.R +import foundation.e.apps.databinding.ActivityApplicationDescriptionBinding import foundation.e.apps.utils.Constants.APPLICATION_DESCRIPTION_KEY -import kotlinx.android.synthetic.main.activity_application_description.* class ApplicationDescriptionActivity : AppCompatActivity() { + private lateinit var binding: ActivityApplicationDescriptionBinding override fun onCreate(savedInstanceState: Bundle?) { + binding = ActivityApplicationDescriptionBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) - setContentView(R.layout.activity_application_description) + setContentView(binding.root) - val toolbar = findViewById(R.id.toolbar) + val toolbar = binding.toolbar setSupportActionBar(toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setTitle(R.string.application_description_activity_title) if (intent != null) { - app_description.text = intent.getStringExtra(APPLICATION_DESCRIPTION_KEY) - Linkify.addLinks(app_description, Linkify.ALL) + binding.appDescription.text = intent.getStringExtra(APPLICATION_DESCRIPTION_KEY) + Linkify.addLinks(binding.appDescription, Linkify.ALL) } } diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt b/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt index 08e6ff449..b5c61ed1b 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt @@ -23,10 +23,6 @@ import android.graphics.Bitmap import android.graphics.Color import android.view.Gravity import android.view.View -import android.widget.Button -import android.widget.ImageView -import android.widget.RatingBar -import android.widget.TextView import androidx.appcompat.content.res.AppCompatResources import androidx.recyclerview.widget.RecyclerView import com.google.android.material.snackbar.Snackbar @@ -38,37 +34,37 @@ import foundation.e.apps.application.model.State import foundation.e.apps.application.model.data.BasicData import foundation.e.apps.application.model.data.PwasBasicData import foundation.e.apps.application.viewmodel.ApplicationViewModel +import foundation.e.apps.databinding.ApplicationListItemBinding import foundation.e.apps.utils.Common import foundation.e.apps.utils.Common.toMiB import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Error import foundation.e.apps.utils.Execute -import kotlinx.android.synthetic.main.application_list_item.view.* -import kotlinx.android.synthetic.main.install_button_layout.view.* -class ApplicationViewHolder(private val activity: Activity, private val view: View, accentColorOS: Int) : - RecyclerView.ViewHolder(view), +class ApplicationViewHolder(private val activity: Activity, binding: ApplicationListItemBinding, accentColorOS: Int) : + RecyclerView.ViewHolder(binding.root), ApplicationStateListener, Downloader.DownloadProgressCallback, BasicData.IconLoaderCallback, PwasBasicData.IconLoaderCallback { - private val icon: ImageView = view.app_icon - private val title: TextView = view.app_title - private val pwa_icon: TextView = view.pwa_sympol - private val author: TextView = view.app_author - private val ratingBar: RatingBar = view.app_rating_bar - private val rating: TextView = view.app_rating - private val privacyScore: TextView = view.app_privacy_score - private var installButton: Button = view.app_install + private val view = binding.root + private val icon = binding.appIcon + private val title = binding.appTitle + private val pwaSympol = binding.pwaSympol + private val author = binding.appAuthor + private val ratingBar = binding.appRatingBar + private val rating = binding.appRating + private val privacyScore = binding.appPrivacyScore + private var installButton = binding.simpleInstallButtonLayout.appInstall private var application: Application? = null private val applicationViewModel = ApplicationViewModel() private var downloader: Downloader? = null var accentColorOS = accentColorOS; init { - pwa_icon.visibility = View.GONE + pwaSympol.visibility = View.GONE view.setOnClickListener { if (application != null) { if (application!!.packageName != Constants.MICROG_PACKAGE) @@ -100,7 +96,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi fun createApplicationView(app: Application) { - pwa_icon.visibility = View.GONE + pwaSympol.visibility = View.GONE this.application = app if (app.basicData != null) { @@ -129,7 +125,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi application!!.addListener(this) if (application!!.searchAppsBasicData != null) { if (application!!.searchAppsBasicData!!.is_pwa) { - pwa_icon.visibility = View.VISIBLE + pwaSympol.visibility = View.VISIBLE } application!!.SearchAppsloadIcon(this) title.text = application!!.searchAppsBasicData!!.name diff --git a/app/src/main/java/foundation/e/apps/common/ApplicationListAdapter.kt b/app/src/main/java/foundation/e/apps/common/ApplicationListAdapter.kt index 02892bfa6..40b13d1cb 100644 --- a/app/src/main/java/foundation/e/apps/common/ApplicationListAdapter.kt +++ b/app/src/main/java/foundation/e/apps/common/ApplicationListAdapter.kt @@ -21,16 +21,16 @@ import android.app.Activity import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import foundation.e.apps.R import foundation.e.apps.application.ApplicationViewHolder import foundation.e.apps.application.model.Application +import foundation.e.apps.databinding.ApplicationListItemBinding class ApplicationListAdapter(private val activity: Activity, private val applicationList: List, accentColorOS: Int) : RecyclerView.Adapter() { var accentColorOS=accentColorOS; override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ApplicationViewHolder { - val listItemContainer = LayoutInflater.from(parent.context).inflate(R.layout.application_list_item, parent, false) + val listItemContainer = ApplicationListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) return ApplicationViewHolder(activity, listItemContainer, accentColorOS) } diff --git a/app/src/main/res/layout/application_list_item.xml b/app/src/main/res/layout/application_list_item.xml index 3387ff0de..679d71014 100644 --- a/app/src/main/res/layout/application_list_item.xml +++ b/app/src/main/res/layout/application_list_item.xml @@ -137,6 +137,7 @@ android:orientation="vertical"> Date: Mon, 3 May 2021 18:05:41 +0530 Subject: [PATCH 05/18] application: Screenshots*: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../e/apps/application/ScreenshotsActivity.kt | 12 +++++++----- .../apps/application/ScreenshotsCarouselAdapter.kt | 13 +++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ScreenshotsActivity.kt b/app/src/main/java/foundation/e/apps/application/ScreenshotsActivity.kt index 8dc9714be..892950664 100644 --- a/app/src/main/java/foundation/e/apps/application/ScreenshotsActivity.kt +++ b/app/src/main/java/foundation/e/apps/application/ScreenshotsActivity.kt @@ -21,16 +21,17 @@ import android.os.Bundle import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.viewpager.widget.ViewPager -import foundation.e.apps.R import foundation.e.apps.application.model.Application import foundation.e.apps.applicationmanager.ApplicationManager import foundation.e.apps.applicationmanager.ApplicationManagerServiceConnection import foundation.e.apps.applicationmanager.ApplicationManagerServiceConnectionCallback +import foundation.e.apps.databinding.ActivityScreenshotsBinding import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Constants.SELECTED_APPLICATION_SCREENSHOT_KEY -import kotlinx.android.synthetic.main.activity_screenshots.* class ScreenshotsActivity : AppCompatActivity(), ApplicationManagerServiceConnectionCallback { + private lateinit var binding: ActivityScreenshotsBinding + private val applicationManagerServiceConnection = ApplicationManagerServiceConnection(this) private lateinit var applicationPackageName: String @@ -40,8 +41,9 @@ class ScreenshotsActivity : AppCompatActivity(), ApplicationManagerServiceConnec private val last_selected_screenshot_key = "last_selected_screenshot" override fun onCreate(savedInstanceState: Bundle?) { + binding = ActivityScreenshotsBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) - setContentView(R.layout.activity_screenshots) + setContentView(binding.root) if (savedInstanceState != null && savedInstanceState.containsKey(last_selected_screenshot_key)) { @@ -72,7 +74,7 @@ class ScreenshotsActivity : AppCompatActivity(), ApplicationManagerServiceConnec val pwasBasicData =application.pwabasicdata if(pwasBasicData!=null) { - screenshotsCarousel = screenshots_carousel + screenshotsCarousel = binding.screenshotsCarousel screenshotsCarousel.visibility = View.GONE pwasBasicData.loadImagesAsyncly { @@ -84,7 +86,7 @@ class ScreenshotsActivity : AppCompatActivity(), ApplicationManagerServiceConnec } } else { - screenshotsCarousel = screenshots_carousel + screenshotsCarousel = binding.screenshotsCarousel screenshotsCarousel.visibility = View.GONE basicData!!.loadImagesAsyncly { diff --git a/app/src/main/java/foundation/e/apps/application/ScreenshotsCarouselAdapter.kt b/app/src/main/java/foundation/e/apps/application/ScreenshotsCarouselAdapter.kt index 522f9a2c5..88e6f02ef 100644 --- a/app/src/main/java/foundation/e/apps/application/ScreenshotsCarouselAdapter.kt +++ b/app/src/main/java/foundation/e/apps/application/ScreenshotsCarouselAdapter.kt @@ -24,12 +24,9 @@ import android.view.View import android.view.ViewGroup import android.widget.LinearLayout import androidx.viewpager.widget.PagerAdapter -import foundation.e.apps.R -import kotlinx.android.synthetic.main.screenshots_carousel_item.view.* +import foundation.e.apps.databinding.ScreenshotsCarouselItemBinding -class ScreenshotsCarouselAdapter(context: Context, private val screenshots: List) : PagerAdapter() { - - private val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater +class ScreenshotsCarouselAdapter(private val context: Context, private val screenshots: List) : PagerAdapter() { override fun isViewFromObject(view: View, obj: Any): Boolean { return view == obj as LinearLayout @@ -40,10 +37,10 @@ class ScreenshotsCarouselAdapter(context: Context, private val screenshots: List } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = layoutInflater.inflate(R.layout.screenshots_carousel_item, container, false) - - view.photo_view.setImageBitmap(screenshots[position]) + val binding = ScreenshotsCarouselItemBinding.inflate(LayoutInflater.from(context), container, false) + val view = binding.root + binding.photoView.setImageBitmap(screenshots[position]) container.addView(view) return view } -- GitLab From 7551050e8813792653e7212da26c20f2e461bcad Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 3 May 2021 19:08:02 +0530 Subject: [PATCH 06/18] home: HomeCategory*: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- app/src/main/java/foundation/e/apps/home/HomeCategory.kt | 9 ++++----- app/src/main/java/foundation/e/apps/home/HomeFragment.kt | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/home/HomeCategory.kt b/app/src/main/java/foundation/e/apps/home/HomeCategory.kt index 0552454fd..68ab3e6ea 100644 --- a/app/src/main/java/foundation/e/apps/home/HomeCategory.kt +++ b/app/src/main/java/foundation/e/apps/home/HomeCategory.kt @@ -18,16 +18,15 @@ package foundation.e.apps.home import android.content.Context -import android.view.View +import android.view.LayoutInflater import android.widget.LinearLayout -import foundation.e.apps.R import foundation.e.apps.categories.model.Category -import kotlinx.android.synthetic.main.home_category_list_item.view.* +import foundation.e.apps.databinding.HomeCategoryListItemBinding class HomeCategory(context: Context, category: Category) : LinearLayout(context) { + var binding = HomeCategoryListItemBinding.inflate(LayoutInflater.from(context), this, true) init { - View.inflate(context, R.layout.home_category_list_item, this) - category_title.text = category.getTitle() + binding.categoryTitle.text = category.getTitle() } } diff --git a/app/src/main/java/foundation/e/apps/home/HomeFragment.kt b/app/src/main/java/foundation/e/apps/home/HomeFragment.kt index 841d379b5..b67224075 100644 --- a/app/src/main/java/foundation/e/apps/home/HomeFragment.kt +++ b/app/src/main/java/foundation/e/apps/home/HomeFragment.kt @@ -144,7 +144,7 @@ class HomeFragment : Fragment() { categoryList.removeAllViews() categories.forEach { val homeCategory = HomeCategory(requireContext(), it.key) - val applicationList = homeCategory.findViewById(R.id.application_list) + val applicationList = homeCategory.binding.applicationList applicationList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) applicationList.adapter = SmallApplicationListAdapter(requireActivity(), it.value) categoryList.addView(homeCategory) -- GitLab From b1a8f68549b241bf778a77ef600c7ffc50d09fdf Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 10:44:49 +0530 Subject: [PATCH 07/18] application: ApplicationActivity: Migrate to viewBinding - Kotlin Android Extensions is deprecated - It has important advantages over using findViewById Ref: - [1]: https://developer.android.com/topic/libraries/view-binding/migration - [2]: https://developer.android.com/topic/libraries/view-binding#findviewbyid Signed-off-by: Aayush Gupta --- .../e/apps/application/ApplicationActivity.kt | 310 +++++++++--------- .../main/res/layout/activity_application.xml | 3 +- 2 files changed, 158 insertions(+), 155 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt index 5f5a89f6d..d998dec80 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt @@ -57,6 +57,7 @@ import foundation.e.apps.applicationmanager.ApplicationManager import foundation.e.apps.applicationmanager.ApplicationManagerServiceConnection import foundation.e.apps.applicationmanager.ApplicationManagerServiceConnectionCallback import foundation.e.apps.categories.category.CategoryActivity +import foundation.e.apps.databinding.ActivityApplicationBinding import foundation.e.apps.pwa.PwaInstaller import foundation.e.apps.utils.Common import foundation.e.apps.utils.Common.toMiB @@ -66,23 +67,22 @@ import foundation.e.apps.utils.Constants.APPLICATION_PACKAGE_NAME_KEY import foundation.e.apps.utils.Constants.SELECTED_APPLICATION_SCREENSHOT_KEY import foundation.e.apps.utils.Error import foundation.e.apps.utils.Execute -import kotlinx.android.synthetic.main.activity_application.* -import kotlinx.android.synthetic.main.install_button_layout.* import kotlin.math.roundToInt class ApplicationActivity : - AppCompatActivity(), - ApplicationStateListener, - ApplicationManagerServiceConnectionCallback, - Downloader.DownloadProgressCallback, - BasicData.IconLoaderCallback, - PwasBasicData.IconLoaderCallback { + AppCompatActivity(), + ApplicationStateListener, + ApplicationManagerServiceConnectionCallback, + Downloader.DownloadProgressCallback, + BasicData.IconLoaderCallback, + PwasBasicData.IconLoaderCallback { + private lateinit var binding: ActivityApplicationBinding private lateinit var applicationPackageName: String private lateinit var application: Application private val applicationManagerServiceConnection = - ApplicationManagerServiceConnection(this) + ApplicationManagerServiceConnection(this) private var imageWidth = 0 private var imageHeight = 0 private var imageMargin = 0 @@ -91,10 +91,12 @@ class ApplicationActivity : var accentColorOS = 0 override fun onCreate(savedInstanceState: Bundle?) { + binding = ActivityApplicationBinding.inflate(layoutInflater) + super.onCreate(savedInstanceState) - setContentView(R.layout.activity_application) - good_border.visibility = View.GONE - neutral_border.visibility = View.GONE + setContentView(binding.root) + binding.goodBorder.visibility = View.GONE + binding.neutralBorder.visibility = View.GONE val toolbar = findViewById(R.id.toolbar) @@ -103,7 +105,7 @@ class ApplicationActivity : supportActionBar?.setDisplayShowTitleEnabled(false) sharedPreferences = this.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE) - pwa_sympol.visibility = View.GONE + binding.pwaSympol.visibility = View.GONE initialiseDimensions() val applicationPackageName: String? = intent.getStringExtra(APPLICATION_PACKAGE_NAME_KEY) @@ -113,26 +115,26 @@ class ApplicationActivity : } getAccentColor() - app_install.setTextColor(Color.parseColor("#ffffff")) - app_install.setBackgroundColor(accentColorOS) - app_category.setTextColor(accentColorOS) - app_expand_description.setTextColor(accentColorOS) + binding.installButtonLayout.appInstall.setTextColor(Color.parseColor("#ffffff")) + binding.installButtonLayout.appInstall.setBackgroundColor(accentColorOS) + binding.appCategory.setTextColor(accentColorOS) + binding.appExpandDescription.setTextColor(accentColorOS) } private fun initialiseElevation() { - if (scroll_view.scrollY == 0) { - toolbar.elevation = 0f + if (binding.scrollView.scrollY == 0) { + binding.toolbar.elevation = 0f } else { - toolbar.elevation = defaultElevation + binding.toolbar.elevation = defaultElevation } - scroll_view.setOnScrollChangeListener { view, _, _, _, _ -> + binding.scrollView.setOnScrollChangeListener { view, _, _, _, _ -> if (view.scrollY == 0) { - toolbar.elevation = 0f + binding.toolbar.elevation = 0f } else { - toolbar.elevation = defaultElevation + binding.toolbar.elevation = defaultElevation } } } @@ -141,28 +143,28 @@ class ApplicationActivity : application = applicationManager.findOrCreateApp(applicationPackageName) var error: Error? = null Execute({ - error = application.assertFullData(this) - }, { - if (error == null) { + error = application.assertFullData(this) + }, { + if (error == null) { - onApplicationInfoLoaded() - } else { - Snackbar.make(container, - getString(error!!.description), - Snackbar.LENGTH_LONG).show() - - // Close activity once snackbar has hidden - object : CountDownTimer(3500, 3500) { - override fun onTick(p0: Long) { - // Do nothing - } + onApplicationInfoLoaded() + } else { + Snackbar.make(binding.container, + getString(error!!.description), + Snackbar.LENGTH_LONG).show() + + // Close activity once snackbar has hidden + object : CountDownTimer(3500, 3500) { + override fun onTick(p0: Long) { + // Do nothing + } - override fun onFinish() { - finish() + override fun onFinish() { + finish() + } + }.start() } - }.start() - } - }) + }) } override fun onCreateOptionsMenu(menu: Menu?): Boolean { @@ -217,42 +219,42 @@ class ApplicationActivity : // Set the app title if (basicData.name.isNotEmpty()) { - app_title.text = basicData.name + binding.appTitle.text = basicData.name } else { - app_title.visibility = View.GONE + binding.appTitle.visibility = View.GONE } // Set the app author if (basicData.author.isNotEmpty()) { - app_author.text = basicData.author + binding.appAuthor.text = basicData.author } else { - app_author.visibility = View.GONE + binding.appAuthor.visibility = View.GONE } // Set the app category if (fullData.category.getTitle().isNotEmpty()) { - app_category.text = fullData.category.getTitle() - app_category.setOnClickListener { + binding.appCategory.text = fullData.category.getTitle() + binding.appCategory.setOnClickListener { startActivity(Intent(this, CategoryActivity::class.java).apply { putExtra(Constants.CATEGORY_KEY, fullData.category) }) } } else { - app_category.visibility = View.GONE + binding.appCategory.visibility = View.GONE } // Set the app description if (fullData.description.isNotEmpty()) { - app_description.text = fullData.description - app_description_container.isEnabled = true + binding.appDescription.text = fullData.description + binding.appDescriptionContainer.isEnabled = true } else { - app_description.text = getString(R.string.not_available_full) - app_description_container.isEnabled = false + binding.appDescription.text = getString(R.string.not_available_full) + binding.appDescriptionContainer.isEnabled = false } // Handle clicks on description - app_description_container.setOnClickListener { + binding.appDescriptionContainer.setOnClickListener { val intent = Intent(this, ApplicationDescriptionActivity::class.java) intent.putExtra(APPLICATION_DESCRIPTION_KEY, application.fullData!!.description) startActivity(intent) @@ -261,13 +263,13 @@ class ApplicationActivity : // Set the app rating val builder = textColorChange(getText(R.string.not_available).toString()) if (basicData.ratings.rating != -1f) { - app_rating.text = basicData.ratings.rating.toString() + "/5" + binding.appRating.text = basicData.ratings.rating.toString() + "/5" } else { - app_rating.text = builder + binding.appRating.text = builder } setRatingBorder(basicData.ratings.rating) - app_rating_container.setOnClickListener { + binding.appRatingContainer.setOnClickListener { val alertDialog = AlertDialog.Builder(this).create() alertDialog.setIcon(R.drawable.ic_app_rating) @@ -289,31 +291,31 @@ class ApplicationActivity : //Set the app licence if (fullData.licence.isNotEmpty()) { - app_licence.text = fullData.licence + binding.appLicence.text = fullData.licence } else { - app_licence.text = getString(R.string.not_available) + binding.appLicence.text = getString(R.string.not_available) } if (fullData.getLastVersion() != null) { // Set app size if (fullData.getLastVersion()!!.fileSize.isNotEmpty()) { - app_size.text = fullData.getLastVersion()!!.fileSize + binding.appSize.text = fullData.getLastVersion()!!.fileSize } else { - app_size.visibility = View.GONE + binding.appSize.visibility = View.GONE } // Set the app privacy rating val builder = textColorChange(getText(R.string.not_available).toString()) if (fullData.getLastVersion()!!.privacyRating != null && - fullData.getLastVersion()!!.privacyRating != -1) { - app_privacy_score.text = fullData.getLastVersion()!!.privacyRating.toString() + "/10" + fullData.getLastVersion()!!.privacyRating != -1) { + binding.appPrivacyScore.text = fullData.getLastVersion()!!.privacyRating.toString() + "/10" setPrivacyRatingBorder(fullData.getLastVersion()!!.privacyRating!!) } else { - app_privacy_score.text = builder + binding.appPrivacyScore.text = builder setPrivacyRatingBorder(-1) } - app_privacy_container.setOnClickListener { + binding.appPrivacyContainer.setOnClickListener { val message = layoutInflater.inflate(R.layout.privacy_dialog_message, null) as TextView @@ -338,40 +340,40 @@ class ApplicationActivity : // Set app version if (fullData.getLastVersion()!!.version.isNotEmpty()) { - app_version.text = fullData.getLastVersion()!!.version + binding.appVersion.text = fullData.getLastVersion()!!.version } else { - app_version.text = getString(R.string.not_available) + binding.appVersion.text = getString(R.string.not_available) } // Set app package name. if (fullData.packageName.isNotEmpty()) { - app_package_name.text = fullData.packageName + binding.appPackageName.text = fullData.packageName } else { - app_package_name.text = getString(R.string.not_available) + binding.appPackageName.text = getString(R.string.not_available) } // Set app update timestamp if (fullData.getLastVersion()!!.createdOn.isNotEmpty()) { - app_updated_on.text = getFormattedTimestamp(fullData.getLastVersion()!!.createdOn) + binding.appUpdatedOn.text = getFormattedTimestamp(fullData.getLastVersion()!!.createdOn) } else { - app_updated_on.text = getString(R.string.not_available) + binding.appUpdatedOn.text = getString(R.string.not_available) } // Set app minimum required Android version if (fullData.getLastVersion()!!.minAndroid.isNotEmpty()) { - app_min_android.text = - getFormattedMinSdkVersion(fullData.getLastVersion()!!.minAndroid) + binding.appMinAndroid.text = + getFormattedMinSdkVersion(fullData.getLastVersion()!!.minAndroid) } else { - app_min_android.text = getString(R.string.not_available) + binding.appMinAndroid.text = getString(R.string.not_available) } } else { // Set app size - app_size.visibility = View.GONE + binding.appSize.visibility = View.GONE // Set app privacy rating val builder = textColorChange(getText(R.string.not_available).toString()) - app_privacy_score.text = builder + binding.appPrivacyScore.text = builder setPrivacyRatingBorder(-1) - app_privacy_container.setOnClickListener { + binding.appPrivacyContainer.setOnClickListener { val alertDialog = AlertDialog.Builder(this).create() alertDialog.setIcon(R.drawable.ic_dialog_info) alertDialog.setTitle(R.string.app_privacy_score) @@ -386,23 +388,23 @@ class ApplicationActivity : } // Set app version - app_version.text = getString(R.string.not_available_full) + binding.appVersion.text = getString(R.string.not_available_full) // Set app update timestamp - app_updated_on.text = getString(R.string.not_available_full) + binding.appUpdatedOn.text = getString(R.string.not_available_full) // Set app minimum required Android version - app_min_android.text = getString(R.string.not_available_full) + binding.appMinAndroid.text = getString(R.string.not_available_full) } // Handle clicks on app permissions - app_permissions_container.setOnClickListener { + binding.appPermissionsContainer.setOnClickListener { val layout = layoutInflater.inflate(R.layout.custom_alert_dialog_layout, null) val message = layout.findViewById(R.id.message) val alertDialog = AlertDialog.Builder(this).create() alertDialog.setTitle(R.string.app_permissions_title) if (fullData.getLastVersion() != null && - fullData.getLastVersion()!!.exodusPermissions != null) { + fullData.getLastVersion()!!.exodusPermissions != null) { if (fullData.getLastVersion()!!.exodusPermissions!!.isNotEmpty()) { var rawMessage = "" var index = 0 @@ -432,7 +434,7 @@ class ApplicationActivity : } // Handle clicks on app trackers - app_trackers_container.setOnClickListener { + binding.appTrackersContainer.setOnClickListener { val layout = layoutInflater.inflate(R.layout.custom_alert_dialog_layout, null) val message = layout.findViewById(R.id.message) @@ -446,7 +448,7 @@ class ApplicationActivity : alertDialog.setTitle(R.string.app_trackers_title) if (fullData.getLastVersion() != null && - fullData.getLastVersion()!!.exodusTrackers != null) { + fullData.getLastVersion()!!.exodusTrackers != null) { if (fullData.getLastVersion()!!.exodusTrackers!!.isNotEmpty()) { var rawMessage = "" var index = 0 @@ -479,7 +481,7 @@ class ApplicationActivity : stateChanged(application.state) // Handle clicks on app install button - app_install.setOnClickListener { + binding.installButtonLayout.appInstall.setOnClickListener { onInstallButtonClick(fullData) } } else { @@ -492,8 +494,8 @@ class ApplicationActivity : private fun onPwaApplicationLoaded() { application.PwaloadIcon(this) - pwa_sympol.visibility = View.VISIBLE - Ratings.visibility = View.GONE + binding.pwaSympol.visibility = View.VISIBLE + binding.Ratings.visibility = View.GONE val pwasBasicData = application.pwabasicdata @@ -502,33 +504,33 @@ class ApplicationActivity : // Set the app title if (pwasBasicData!!.name.isNotEmpty()) { - app_title.text = pwasBasicData.name + binding.appTitle.text = pwasBasicData.name } else { - app_title.visibility = View.GONE + binding.appTitle.visibility = View.GONE } // Set the app description if (pwaFullData!!.description.isNotEmpty()) { - app_description.text = pwaFullData.description - app_description_container.isEnabled = true + binding.appDescription.text = pwaFullData.description + binding.appDescriptionContainer.isEnabled = true } else { - app_description.text = getString(R.string.not_available_full) - app_description_container.isEnabled = false + binding.appDescription.text = getString(R.string.not_available_full) + binding.appDescriptionContainer.isEnabled = false } if (pwaFullData.category.getTitle().isNotEmpty()) { - app_category.text = pwaFullData.category.getTitle() - app_category.setOnClickListener { + binding.appCategory.text = pwaFullData.category.getTitle() + binding.appCategory.setOnClickListener { startActivity(Intent(this, CategoryActivity::class.java).apply { putExtra(Constants.CATEGORY_KEY, pwaFullData.category) }) } } else { - app_category.visibility = View.GONE + binding.appCategory.visibility = View.GONE } // Handle clicks on description - app_description_container.setOnClickListener { + binding.appDescriptionContainer.setOnClickListener { val intent = Intent(this, ApplicationDescriptionActivity::class.java) intent.putExtra(APPLICATION_DESCRIPTION_KEY, application.pwaFullData!!.description) startActivity(intent) @@ -541,29 +543,29 @@ class ApplicationActivity : // Handle clicks on app permissions - exodus_info_container.visibility = View.GONE + binding.exodusInfoContainer.visibility = View.GONE //app_information details - app_information_title.visibility = View.GONE - app_version_layout.visibility = View.GONE - app_updated_on_layout.visibility = View.GONE - app_requires.visibility = View.GONE - app_licence_layout.visibility = View.GONE - app_package_name_layout.visibility =View.GONE + binding.appInformationTitle.visibility = View.GONE + binding.appVersionLayout.visibility = View.GONE + binding.appUpdatedOnLayout.visibility = View.GONE + binding.appRequires.visibility = View.GONE + binding.appLicenceLayout.visibility = View.GONE + binding.appPackageNameLayout.visibility =View.GONE application.addListener(this) stateChanged(application.state) // Handle clicks on app install button - app_install.setOnClickListener { + binding.installButtonLayout.appInstall.setOnClickListener { onPwaInstallButtonClick(pwaFullData) } } override fun onIconLoaded(application: Application, bitmap: Bitmap) { if (application == this.application) { - app_icon.setImageBitmap(bitmap) + binding.appIcon.setImageBitmap(bitmap) } } @@ -588,9 +590,9 @@ class ApplicationActivity : if (fullData.getLastVersion() == null) { - Snackbar.make(container, - getString(Error.APK_UNAVAILABLE.description), - Snackbar.LENGTH_LONG).show() + Snackbar.make(binding.container, + getString(Error.APK_UNAVAILABLE.description), + Snackbar.LENGTH_LONG).show() return } @@ -611,46 +613,46 @@ class ApplicationActivity : @SuppressLint("SetTextI18n") override fun notifyDownloadProgress(count: Int, total: Int) { - app_download_mb.text = "${toMiB(count)}/${toMiB(total)} MiB" - app_download_percentage.text = - ((toMiB(count) / toMiB(total)) * 100).toInt().toString() + "%" - app_download_progress.max = total - app_download_progress.progress = count + binding.appDownloadMb.text = "${toMiB(count)}/${toMiB(total)} MiB" + binding.appDownloadPercentage.text = + ((toMiB(count) / toMiB(total)) * 100).toInt().toString() + "%" + binding.appDownloadProgress.max = total + binding.appDownloadProgress.progress = count } override fun anErrorHasOccurred(error: Error) { - Snackbar.make(container, - getString(error.description), - Snackbar.LENGTH_LONG).show() + Snackbar.make(binding.container, + getString(error.description), + Snackbar.LENGTH_LONG).show() } override fun stateChanged(state: State) { Execute({}, { - app_install.text = resources.getString(state.installButtonTextId) + binding.installButtonLayout.appInstall.text = resources.getString(state.installButtonTextId) when (state) { State.INSTALLED -> { - app_install.isEnabled = - Common.appHasLaunchActivity(this, application.packageName) - app_size.visibility = View.VISIBLE - app_download_container.visibility = View.GONE + binding.installButtonLayout.appInstall.isEnabled = + Common.appHasLaunchActivity(this, application.packageName) + binding.appSize.visibility = View.VISIBLE + binding.appDownloadContainer.visibility = View.GONE } State.DOWNLOADING -> { - app_install.isEnabled = true - app_size.visibility = View.GONE - app_download_mb.text = getString(R.string.state_installing) - app_download_percentage.text = "" - app_download_progress.progress = 0 - app_download_container.visibility = View.VISIBLE + binding.installButtonLayout.appInstall.isEnabled = true + binding.appSize.visibility = View.GONE + binding.appDownloadMb.text = getString(R.string.state_installing) + binding.appDownloadPercentage.text = "" + binding.appDownloadProgress.progress = 0 + binding.appDownloadContainer.visibility = View.VISIBLE } State.INSTALLING -> { - app_install.isEnabled = false - app_size.visibility = View.VISIBLE - app_download_container.visibility = View.GONE + binding.installButtonLayout.appInstall.isEnabled = false + binding.appSize.visibility = View.VISIBLE + binding.appDownloadContainer.visibility = View.GONE } else -> { - app_install.isEnabled = true - app_size.visibility = View.VISIBLE - app_download_container.visibility = View.GONE + binding.installButtonLayout.appInstall.isEnabled = true + binding.appSize.visibility = View.VISIBLE + binding.appDownloadContainer.visibility = View.GONE } } }) @@ -659,13 +661,13 @@ class ApplicationActivity : private fun setRatingBorder(rating: Float?) { when { rating!! >= 7f -> { - app_rating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_cat_green_ellipse, 0) + binding.appRating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_cat_green_ellipse, 0) } rating >= 4f -> { - app_rating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_yellow_ellipse, 0) + binding.appRating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_yellow_ellipse, 0) } else -> { - app_rating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_red_ellipse, 0) + binding.appRating.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_red_ellipse, 0) } } } @@ -673,34 +675,34 @@ class ApplicationActivity : private fun setPrivacyRatingBorder(rating: Int) { when { rating >= 7 -> { - app_privacy_score.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_cat_green_ellipse, 0) + binding.appPrivacyScore.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_cat_green_ellipse, 0) } rating >= 4 -> { - app_privacy_score.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_yellow_ellipse, 0) + binding.appPrivacyScore.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_yellow_ellipse, 0) } else -> { - app_privacy_score.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_red_ellipse, 0) + binding.appPrivacyScore.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_red_ellipse, 0) } } } private fun showImages(images: List) { - app_screenshots_progress_bar.visibility = View.GONE + binding.appScreenshotsProgressBar.visibility = View.GONE if (images.isEmpty()) { - app_screenshots_error.visibility = View.VISIBLE + binding.appScreenshotsError.visibility = View.VISIBLE return } else { - app_screenshots_error.visibility = View.GONE + binding.appScreenshotsError.visibility = View.GONE } - app_images_container.removeAllViews() + binding.appImagesContainer.removeAllViews() images.forEach { val imageView = ImageView(this) val layoutParams = - if (it.height < it.width) { - LinearLayout.LayoutParams((imageHeight * 1.78).toInt(), imageHeight) - } else { - LinearLayout.LayoutParams(imageWidth, imageHeight) - } + if (it.height < it.width) { + LinearLayout.LayoutParams((imageHeight * 1.78).toInt(), imageHeight) + } else { + LinearLayout.LayoutParams(imageWidth, imageHeight) + } layoutParams.leftMargin = imageMargin layoutParams.rightMargin = imageMargin imageView.layoutParams = layoutParams @@ -709,15 +711,15 @@ class ApplicationActivity : val outValue = TypedValue() theme.resolveAttribute(android.R.attr.selectableItemBackground, outValue, true) imageView.foreground = getDrawable(outValue.resourceId) - app_images_container.addView(imageView) + binding.appImagesContainer.addView(imageView) imageView.setOnClickListener { _ -> val intent = Intent(this, ScreenshotsActivity::class.java) intent.putExtra(APPLICATION_PACKAGE_NAME_KEY, application.packageName) intent.putExtra(SELECTED_APPLICATION_SCREENSHOT_KEY, images.indexOf(it)) startActivity(intent) } - app_images_scroll_view.visibility = View.VISIBLE - app_images_container.visibility = View.VISIBLE + binding.appImagesScrollView.visibility = View.VISIBLE + binding.appImagesContainer.visibility = View.VISIBLE } } @@ -727,8 +729,8 @@ class ApplicationActivity : if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { application.buttonClicked(this, this) } else if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_DENIED) { - Snackbar.make(container, R.string.error_storage_permission_denied, - Snackbar.LENGTH_LONG).show() + Snackbar.make(binding.container, R.string.error_storage_permission_denied, + Snackbar.LENGTH_LONG).show() } } } diff --git a/app/src/main/res/layout/activity_application.xml b/app/src/main/res/layout/activity_application.xml index f973d6d8f..af51a390c 100644 --- a/app/src/main/res/layout/activity_application.xml +++ b/app/src/main/res/layout/activity_application.xml @@ -214,7 +214,7 @@ android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_marginStart="@dimen/layout_margin_medium" - android:layout_toStartOf="@id/app_install" + android:layout_toStartOf="@id/install_button_layout" android:ellipsize="end" android:gravity="center" android:maxLines="1" @@ -224,6 +224,7 @@ Date: Tue, 4 May 2021 10:47:45 +0530 Subject: [PATCH 08/18] app: gradle: Remove kotlin-android-extensions plugin dependency - It has been deprecated Ref: - [1]: https://android-developers.googleblog.com/2020/11/the-future-of-kotlin-android-extensions.html Signed-off-by: Aayush Gupta --- app/build.gradle | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7bbca8c76..54e773b2e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,6 @@ plugins { id 'com.android.application' id 'kotlin-android' - id 'kotlin-android-extensions' id 'kotlin-kapt' } @@ -48,9 +47,6 @@ android { lintConfig file("lint.xml") disable 'MissingTranslation' } - androidExtensions { - experimental = true - } aaptOptions { additionalParameters '-I', 'app/e-ui-sdk.jar' } -- GitLab From dba202b20fcfb0107f0f956bce1e6bb8b312743d Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 10:49:05 +0530 Subject: [PATCH 09/18] XAPK: ApksBean: Migrate to kotlin-parcelize plugin for Parcelable implementation Ref: - [1]: https://developer.android.com/kotlin/parcelize Signed-off-by: Aayush Gupta --- app/build.gradle | 1 + app/src/main/java/foundation/e/apps/XAPK/ApksBean.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 54e773b2e..ca4100563 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' + id 'kotlin-parcelize' } android { diff --git a/app/src/main/java/foundation/e/apps/XAPK/ApksBean.kt b/app/src/main/java/foundation/e/apps/XAPK/ApksBean.kt index c389394de..b880e71e4 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/ApksBean.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/ApksBean.kt @@ -19,7 +19,7 @@ package foundation.e.apps.XAPK import android.annotation.SuppressLint import android.os.Parcelable -import kotlinx.android.parcel.Parcelize +import kotlinx.parcelize.Parcelize @SuppressLint("ParcelCreator") @Parcelize -- GitLab From f1d21f7584c88c36b609eb04d4cc4a6a9dd1707b Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 11:23:44 +0530 Subject: [PATCH 10/18] Apps: Resolve compile-time warnings for shadowed variable names Signed-off-by: Aayush Gupta --- .../e/apps/application/ApplicationActivity.kt | 10 +++------- .../updates/model/OutdatedApplicationsFileReader.kt | 4 ++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt index d998dec80..efc5bd2cc 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt @@ -261,11 +261,10 @@ class ApplicationActivity : } // Set the app rating - val builder = textColorChange(getText(R.string.not_available).toString()) if (basicData.ratings.rating != -1f) { binding.appRating.text = basicData.ratings.rating.toString() + "/5" } else { - binding.appRating.text = builder + binding.appRating.text = textColorChange(getText(R.string.not_available).toString()) } setRatingBorder(basicData.ratings.rating) @@ -305,14 +304,12 @@ class ApplicationActivity : } // Set the app privacy rating - val builder = textColorChange(getText(R.string.not_available).toString()) - if (fullData.getLastVersion()!!.privacyRating != null && fullData.getLastVersion()!!.privacyRating != -1) { binding.appPrivacyScore.text = fullData.getLastVersion()!!.privacyRating.toString() + "/10" setPrivacyRatingBorder(fullData.getLastVersion()!!.privacyRating!!) } else { - binding.appPrivacyScore.text = builder + binding.appPrivacyScore.text = textColorChange(getText(R.string.not_available).toString()) setPrivacyRatingBorder(-1) } binding.appPrivacyContainer.setOnClickListener { @@ -370,8 +367,7 @@ class ApplicationActivity : binding.appSize.visibility = View.GONE // Set app privacy rating - val builder = textColorChange(getText(R.string.not_available).toString()) - binding.appPrivacyScore.text = builder + binding.appPrivacyScore.text = textColorChange(getText(R.string.not_available).toString()) setPrivacyRatingBorder(-1) binding.appPrivacyContainer.setOnClickListener { val alertDialog = AlertDialog.Builder(this).create() diff --git a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt index 93c75430b..326c16658 100644 --- a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt +++ b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt @@ -45,8 +45,8 @@ class OutdatedApplicationsFileReader(private val packageManager: PackageManager, try { val installedApplications = getInstalledApplications() installedApplications.forEach { packageName -> - val application = applicationManager.findOrCreateApp(packageName) - verifyApplication(application, applications, context) + val app = applicationManager.findOrCreateApp(packageName) + verifyApplication(app, applications, context) } } catch (exception: Exception) { exception.printStackTrace() -- GitLab From d9107648ace379a0e9234624e307ecb344e743e7 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 13:53:57 +0530 Subject: [PATCH 11/18] settings: Switch to AlertDialog inplace of ProgressDialog - ProgressDialog has been deprecated Ref: [1]: https://developer.android.com/reference/android/app/ProgressDialog Signed-off-by: Aayush Gupta --- .../e/apps/settings/SettingsFragment.kt | 23 +++++------- app/src/main/res/layout/progress_dialog.xml | 35 +++++++++++++++++++ 2 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 app/src/main/res/layout/progress_dialog.xml diff --git a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt index e246d4742..a9db08cd9 100644 --- a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +++ b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt @@ -18,17 +18,15 @@ package foundation.e.apps.settings import android.annotation.SuppressLint -import android.app.ProgressDialog +import android.app.AlertDialog import android.content.Intent import android.os.Bundle import androidx.preference.CheckBoxPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import foundation.e.apps.MainActivity import foundation.e.apps.R import foundation.e.apps.updates.UpdatesManager -import foundation.e.apps.utils.PreferenceStorage import java.util.concurrent.Executors import java.util.concurrent.TimeUnit @@ -98,8 +96,7 @@ class SettingsFragment : PreferenceFragmentCompat() { } } - - private var working_dialog: ProgressDialog? = null + private lateinit var progressDialog: AlertDialog fun backToMainActivity() { showWorkingDialog() @@ -107,24 +104,22 @@ class SettingsFragment : PreferenceFragmentCompat() { val task = Runnable { run { removeWorkingDialog() - val intent = Intent(activity, MainActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK - Intent.FLAG_ACTIVITY_NEW_TASK - startActivity(intent) - requireActivity().finish() + activity?.recreate() } } worker.schedule(task, 1, TimeUnit.SECONDS) } private fun showWorkingDialog() { - working_dialog = ProgressDialog.show(context, "", "Applying Settings...", true) + progressDialog = AlertDialog.Builder(context) + .setView(R.layout.progress_dialog) + .create() + progressDialog.show() } private fun removeWorkingDialog() { - if (working_dialog != null) { - working_dialog!!.dismiss() - working_dialog = null + if (progressDialog.isShowing) { + progressDialog.dismiss() } } } diff --git a/app/src/main/res/layout/progress_dialog.xml b/app/src/main/res/layout/progress_dialog.xml new file mode 100644 index 000000000..4ff6aba8d --- /dev/null +++ b/app/src/main/res/layout/progress_dialog.xml @@ -0,0 +1,35 @@ + + + + + + + + + \ No newline at end of file -- GitLab From 897b3a101a2d9d9d8733fccc2abb8631c99b2ba2 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 14:24:16 +0530 Subject: [PATCH 12/18] application: FullData: Supress unchecked cast warning for ArrayList Signed-off-by: Aayush Gupta --- .../java/foundation/e/apps/application/model/data/FullData.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt b/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt index eb352f707..2affc3fcf 100644 --- a/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt +++ b/app/src/main/java/foundation/e/apps/application/model/data/FullData.kt @@ -90,7 +90,7 @@ constructor( this.category = Category(categoryId, "") } - @Suppress("unused") + @Suppress("unused", "UNCHECKED_CAST") @JsonAnySetter fun jsonCreator(name: String, value: Any) { if (name == basicData.latestDownloadableUpdate) { -- GitLab From 45391d8302fceb9a3b1b65d5f07a9783e7df4085 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 14:34:00 +0530 Subject: [PATCH 13/18] apps: GitlabDataRequest: Switch to parseReader inplace of JsonParser().parse() - JsonParser() has been deprecated Ref: - [1]: https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/com/google/gson/JsonParser.html Signed-off-by: Aayush Gupta --- app/src/main/java/foundation/e/apps/api/GitlabDataRequest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/api/GitlabDataRequest.kt b/app/src/main/java/foundation/e/apps/api/GitlabDataRequest.kt index 7596e8b71..0c7ad9062 100644 --- a/app/src/main/java/foundation/e/apps/api/GitlabDataRequest.kt +++ b/app/src/main/java/foundation/e/apps/api/GitlabDataRequest.kt @@ -19,7 +19,7 @@ package foundation.e.apps.api import android.content.Context import com.google.gson.Gson -import com.google.gson.JsonParser +import com.google.gson.JsonParser.parseReader import foundation.e.apps.application.model.Application import foundation.e.apps.application.model.data.BasicData import foundation.e.apps.application.model.release.ReleaseData @@ -35,7 +35,7 @@ class GitlabDataRequest { val url = Constants.RELEASE_API + Constants.MICROG_ID + Constants.RELEASE_ENDPOINT val urlConnection = Common.createConnection(url, Constants.REQUEST_METHOD_GET) val isr = InputStreamReader(urlConnection.inputStream) - val element = JsonParser().parse(isr) + val element = parseReader(isr) val releaseList: List = Gson().fromJson(element.toString(), Array::class.java).toList() -- GitLab From 153f252828fc39125de497e44ea448778725877b Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 14:47:55 +0530 Subject: [PATCH 14/18] XAPK: FsUtils: Resolve type mismatch in exists() method Compile-time warning> Type mismatch: inferred type is String? but String was expected Signed-off-by: Aayush Gupta --- app/src/main/java/foundation/e/apps/XAPK/FsUtils.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/XAPK/FsUtils.kt b/app/src/main/java/foundation/e/apps/XAPK/FsUtils.kt index 25fa0c379..41d84504c 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/FsUtils.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/FsUtils.kt @@ -18,7 +18,6 @@ package foundation.e.apps.XAPK import android.os.Environment -import android.text.TextUtils import foundation.e.apps.MainActivity import java.io.File @@ -37,7 +36,7 @@ object FsUtils { } fun exists(filePath: String?): Boolean { - return !TextUtils.isEmpty(filePath) && exists(File(filePath)) + return if (!filePath.isNullOrEmpty()) exists(File(filePath)) else false } fun exists(file: File?): Boolean { -- GitLab From ec43d623f01376b5bf267fd6bf0e43c76df352dd Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 15:55:49 +0530 Subject: [PATCH 15/18] Apps: Optimize imports Signed-off-by: Aayush Gupta --- app/src/main/java/foundation/e/apps/XAPK/AppFolder.kt | 1 - app/src/main/java/foundation/e/apps/XAPK/IntentUtils.kt | 1 - app/src/main/java/foundation/e/apps/XAPK/LocaleUtils.kt | 1 - app/src/main/java/foundation/e/apps/XAPK/UriUtils.kt | 1 - app/src/main/java/foundation/e/apps/XAPK/XApkInstallUtils.kt | 1 - .../java/foundation/e/apps/application/model/Installer.kt | 1 - .../java/foundation/e/apps/application/model/StateManager.kt | 2 -- .../foundation/e/apps/common/SmallApplicationListAdapter.kt | 1 - app/src/main/java/foundation/e/apps/home/HomeFragment.kt | 3 --- app/src/main/java/foundation/e/apps/search/SearchFragment.kt | 5 +++-- .../e/apps/updates/model/OutdatedApplicationsFileReader.kt | 1 - 11 files changed, 3 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/XAPK/AppFolder.kt b/app/src/main/java/foundation/e/apps/XAPK/AppFolder.kt index eb99f66e7..6429d0234 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/AppFolder.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/AppFolder.kt @@ -17,7 +17,6 @@ package foundation.e.apps.XAPK -import android.os.Environment import foundation.e.apps.BuildConfig import foundation.e.apps.MainActivity import java.io.File diff --git a/app/src/main/java/foundation/e/apps/XAPK/IntentUtils.kt b/app/src/main/java/foundation/e/apps/XAPK/IntentUtils.kt index 079b591af..7d1533d61 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/IntentUtils.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/IntentUtils.kt @@ -19,7 +19,6 @@ package foundation.e.apps.XAPK import android.content.Context import android.content.Intent -import android.os.Build import java.io.File object IntentUtils { diff --git a/app/src/main/java/foundation/e/apps/XAPK/LocaleUtils.kt b/app/src/main/java/foundation/e/apps/XAPK/LocaleUtils.kt index 2b8abdea3..cd8eade7f 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/LocaleUtils.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/LocaleUtils.kt @@ -17,7 +17,6 @@ package foundation.e.apps.XAPK -import android.os.Build import android.os.LocaleList import android.text.TextUtils import java.util.* diff --git a/app/src/main/java/foundation/e/apps/XAPK/UriUtils.kt b/app/src/main/java/foundation/e/apps/XAPK/UriUtils.kt index 72b06b44a..85911b333 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/UriUtils.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/UriUtils.kt @@ -19,7 +19,6 @@ package foundation.e.apps.XAPK import android.content.Context import android.net.Uri -import android.os.Build import androidx.core.content.FileProvider import foundation.e.apps.BuildConfig import java.io.File diff --git a/app/src/main/java/foundation/e/apps/XAPK/XApkInstallUtils.kt b/app/src/main/java/foundation/e/apps/XAPK/XApkInstallUtils.kt index 2b4e3805e..563a03c9f 100644 --- a/app/src/main/java/foundation/e/apps/XAPK/XApkInstallUtils.kt +++ b/app/src/main/java/foundation/e/apps/XAPK/XApkInstallUtils.kt @@ -17,7 +17,6 @@ package foundation.e.apps.XAPK -import android.os.Build import android.os.Handler import android.os.Looper import androidx.annotation.MainThread diff --git a/app/src/main/java/foundation/e/apps/application/model/Installer.kt b/app/src/main/java/foundation/e/apps/application/model/Installer.kt index 6ce65b5e8..432c0923f 100644 --- a/app/src/main/java/foundation/e/apps/application/model/Installer.kt +++ b/app/src/main/java/foundation/e/apps/application/model/Installer.kt @@ -27,7 +27,6 @@ import android.net.Uri import android.util.Log import androidx.core.content.ContextCompat import androidx.core.content.FileProvider -import foundation.e.apps.R import foundation.e.apps.XAPK.FsUtils.deleteFileOrDir import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF diff --git a/app/src/main/java/foundation/e/apps/application/model/StateManager.kt b/app/src/main/java/foundation/e/apps/application/model/StateManager.kt index b1d16b700..ae9801058 100644 --- a/app/src/main/java/foundation/e/apps/application/model/StateManager.kt +++ b/app/src/main/java/foundation/e/apps/application/model/StateManager.kt @@ -19,7 +19,6 @@ package foundation.e.apps.application.model import android.content.Context import android.util.Log -import foundation.e.apps.R import foundation.e.apps.application.model.data.BasicData import foundation.e.apps.application.model.data.SearchAppsBasicData import foundation.e.apps.applicationmanager.ApplicationManager @@ -30,7 +29,6 @@ import foundation.e.apps.utils.Error import foundation.e.apps.utils.PreferenceStorage import java.util.* - class StateManager(private val info: ApplicationInfo, private val app: Application, private val appManager: ApplicationManager) { private var listeners = Collections.synchronizedList(ArrayList()) diff --git a/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt b/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt index 8f7a995e2..f65aa46de 100644 --- a/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt +++ b/app/src/main/java/foundation/e/apps/common/SmallApplicationListAdapter.kt @@ -21,7 +21,6 @@ import android.app.Activity import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import foundation.e.apps.R import foundation.e.apps.application.SmallApplicationViewHolder import foundation.e.apps.application.model.Application import foundation.e.apps.databinding.SmallApplicationListItemBinding diff --git a/app/src/main/java/foundation/e/apps/home/HomeFragment.kt b/app/src/main/java/foundation/e/apps/home/HomeFragment.kt index b67224075..a23d41583 100644 --- a/app/src/main/java/foundation/e/apps/home/HomeFragment.kt +++ b/app/src/main/java/foundation/e/apps/home/HomeFragment.kt @@ -28,9 +28,7 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView import androidx.viewpager.widget.ViewPager -import foundation.e.apps.R import foundation.e.apps.application.model.Application import foundation.e.apps.applicationmanager.ApplicationManager import foundation.e.apps.categories.model.Category @@ -38,7 +36,6 @@ import foundation.e.apps.common.SmallApplicationListAdapter import foundation.e.apps.databinding.FragmentHomeBinding import foundation.e.apps.home.viewmodel.HomeViewModel - class HomeFragment : Fragment() { private var _binding: FragmentHomeBinding? = null private val binding get() = _binding!! diff --git a/app/src/main/java/foundation/e/apps/search/SearchFragment.kt b/app/src/main/java/foundation/e/apps/search/SearchFragment.kt index d35024783..54f8e141f 100644 --- a/app/src/main/java/foundation/e/apps/search/SearchFragment.kt +++ b/app/src/main/java/foundation/e/apps/search/SearchFragment.kt @@ -26,7 +26,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.inputmethod.InputMethodManager -import android.widget.* +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ProgressBar import androidx.appcompat.widget.SearchView import androidx.cursoradapter.widget.CursorAdapter import androidx.cursoradapter.widget.SimpleCursorAdapter @@ -44,7 +46,6 @@ import foundation.e.apps.search.viewmodel.SearchViewModel import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Constants.SUGGESTION_KEY - class SearchFragment : Fragment(), SearchView.OnQueryTextListener, SearchView.OnSuggestionListener { private var _binding: FragmentSearchBinding? = null private val binding get() = _binding!! diff --git a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt index 326c16658..41e4039ed 100644 --- a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt +++ b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt @@ -20,7 +20,6 @@ package foundation.e.apps.updates.model import android.content.Context import android.content.pm.PackageManager import android.os.AsyncTask -import foundation.e.apps.R import foundation.e.apps.api.GitlabDataRequest import foundation.e.apps.application.model.Application import foundation.e.apps.application.model.State -- GitLab From b4606998202a10ec139280faca6e3e5f397dc219 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 16:16:06 +0530 Subject: [PATCH 16/18] app: gradle: Optimize dependencies - Drop non-required dependencies - Add missing livedata dependency and disable null safe warning (should be resolved) Signed-off-by: Aayush Gupta --- app/build.gradle | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ca4100563..55ac73b87 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,6 @@ android { versionName "1.2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables.useSupportLibrary = true } signingConfigs { @@ -47,6 +46,7 @@ android { lintOptions { lintConfig file("lint.xml") disable 'MissingTranslation' + disable 'NullSafeMutableLiveData' } aaptOptions { additionalParameters '-I', 'app/e-ui-sdk.jar' @@ -78,21 +78,12 @@ dependencies { // Preference implementation "androidx.preference:preference-ktx:1.1.1" - // Lifecycle - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1" - // Bouncy Castle implementation 'org.bouncycastle:bcpg-jdk15on:1.60' // GSON implementation 'com.google.code.gson:gson:2.8.6' - // EventBus - implementation 'org.greenrobot:eventbus:3.2.0' - - // Volley - implementation "com.android.volley:volley:1.2.0" - // PhotoView implementation "com.github.chrisbanes:PhotoView:2.3.0" @@ -105,14 +96,10 @@ dependencies { // WorkManager implementation 'androidx.work:work-runtime:2.5.0' - // Android-Iconics - implementation 'com.mikepenz:iconics-core:3.1.0@aar' - implementation 'com.mikepenz:google-material-typeface:3.0.1.2.original@aar' - - // Vectordrawable - def vector_version = "1.1.0" - implementation "androidx.vectordrawable:vectordrawable:$vector_version" - implementation "androidx.vectordrawable:vectordrawable-animated:$vector_version" + // Lifecycle + def lifecycle_version = "2.3.1" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" // Navigation component def nav_version = "2.3.5" -- GitLab From bbe4b3985e78f22df722fd5c74026f7ab8cae793 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 17:06:06 +0530 Subject: [PATCH 17/18] settings: Rework MainActivity switching method - Now it provides better UX by switching seamlessly without any blinking animation or loading dialog Signed-off-by: Aayush Gupta --- .../e/apps/settings/SettingsFragment.kt | 34 ++++-------------- app/src/main/res/layout/progress_dialog.xml | 35 ------------------- 2 files changed, 7 insertions(+), 62 deletions(-) delete mode 100644 app/src/main/res/layout/progress_dialog.xml diff --git a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt index a9db08cd9..9de06b140 100644 --- a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +++ b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt @@ -18,17 +18,15 @@ package foundation.e.apps.settings import android.annotation.SuppressLint -import android.app.AlertDialog import android.content.Intent import android.os.Bundle import androidx.preference.CheckBoxPreference import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import foundation.e.apps.MainActivity import foundation.e.apps.R import foundation.e.apps.updates.UpdatesManager -import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit class SettingsFragment : PreferenceFragmentCompat() { @@ -96,30 +94,12 @@ class SettingsFragment : PreferenceFragmentCompat() { } } - private lateinit var progressDialog: AlertDialog - - fun backToMainActivity() { - showWorkingDialog() - val worker = Executors.newSingleThreadScheduledExecutor() - val task = Runnable { - run { - removeWorkingDialog() - activity?.recreate() - } - } - worker.schedule(task, 1, TimeUnit.SECONDS) - } - - private fun showWorkingDialog() { - progressDialog = AlertDialog.Builder(context) - .setView(R.layout.progress_dialog) - .create() - progressDialog.show() - } - - private fun removeWorkingDialog() { - if (progressDialog.isShowing) { - progressDialog.dismiss() + private fun backToMainActivity() { + Intent(context, MainActivity::class.java).also { + activity?.finish() + activity?.overridePendingTransition(0, 0); + startActivity(it) + activity?.overridePendingTransition(0, 0); } } } diff --git a/app/src/main/res/layout/progress_dialog.xml b/app/src/main/res/layout/progress_dialog.xml deleted file mode 100644 index 4ff6aba8d..000000000 --- a/app/src/main/res/layout/progress_dialog.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - \ No newline at end of file -- GitLab From 1c7ccdff0d03de904b6c653f16fd552a876f9572 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Tue, 4 May 2021 17:57:55 +0530 Subject: [PATCH 18/18] application: Accept and set ratings as a parameter in SearchAppsBasicData Signed-off-by: Aayush Gupta --- .../e/apps/application/ApplicationViewHolder.kt | 11 +++++++++++ .../application/model/data/SearchAppsBasicData.kt | 1 + 2 files changed, 12 insertions(+) diff --git a/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt b/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt index b5c61ed1b..eb897694b 100644 --- a/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt +++ b/app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt @@ -130,6 +130,17 @@ class ApplicationViewHolder(private val activity: Activity, binding: Application application!!.SearchAppsloadIcon(this) title.text = application!!.searchAppsBasicData!!.name author.text = application!!.searchAppsBasicData!!.author + ratingBar.rating = application!!.searchAppsBasicData!!.ratings.rating!! + if (application!!.searchAppsBasicData!!.ratings.rating != -1f) { + rating.text = application!!.searchAppsBasicData!!.ratings.rating.toString() + } else { + rating.text = activity.getString(R.string.not_available) + } + if (application!!.searchAppsBasicData!!.ratings.privacyRating != null && application!!.searchAppsBasicData!!.ratings.privacyRating != -1f) { + privacyScore.text = application!!.searchAppsBasicData!!.ratings.privacyRating.toString() + } else { + privacyScore.text = activity.getString(R.string.not_available) + } } else { application!!.PwaloadIcon(this) title.text = application!!.pwabasicdata!!.name diff --git a/app/src/main/java/foundation/e/apps/application/model/data/SearchAppsBasicData.kt b/app/src/main/java/foundation/e/apps/application/model/data/SearchAppsBasicData.kt index 42b234ac5..2786f4e34 100644 --- a/app/src/main/java/foundation/e/apps/application/model/data/SearchAppsBasicData.kt +++ b/app/src/main/java/foundation/e/apps/application/model/data/SearchAppsBasicData.kt @@ -54,6 +54,7 @@ constructor(@param:JsonProperty("_id") val id: String, @param:JsonProperty("is_pwa") val is_pwa: Boolean, @param:JsonProperty("author") val author: String, @param:JsonProperty("is_web_app") val is_web_app: Boolean, + @param:JsonProperty("ratings") val ratings: BasicData.Ratings, @param:JsonProperty("category") val category: String, @param:JsonProperty("icon_image_path") val icon_uri: String, @param:JsonProperty("other_images_path") val imagesUri: Array){ -- GitLab