Loading app/src/main/java/foundation/e/apps/MainActivity.kt +66 −4 Original line number Original line Diff line number Diff line Loading @@ -19,15 +19,24 @@ package foundation.e.apps //import androidx.fragment.app.ListFragment //import androidx.fragment.app.ListFragment import android.annotation.SuppressLint import android.annotation.SuppressLint import android.content.* import android.content.* import android.content.pm.PackageManager import android.content.pm.PackageManager import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.os.Bundle import android.os.Handler import android.os.Handler import android.preference.PreferenceManager import android.preference.PreferenceManager import android.util.TypedValue import android.view.MenuItem import android.view.MenuItem import android.widget.Toast import android.widget.Toast import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ContextThemeWrapper import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.DrawableCompat import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationItemView import com.google.android.material.bottomnavigation.BottomNavigationItemView import com.google.android.material.bottomnavigation.BottomNavigationMenuView import com.google.android.material.bottomnavigation.BottomNavigationMenuView Loading Loading @@ -60,7 +69,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS private val codeRequestPermissions = 9527 private val codeRequestPermissions = 9527 var doubleBackToExitPressedOnce = false; var doubleBackToExitPressedOnce = false; private var isReceiverRegistered = false private var isReceiverRegistered = false var accentColorOS = 0 companion object { companion object { Loading @@ -70,12 +79,16 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate(savedInstanceState) //ThemeColors(this); setContentView(R.layout.activity_main) setContentView(R.layout.activity_main) mActivity = this mActivity = this disableCategoryIfOpenSource() disableCategoryIfOpenSource() bottom_navigation_view.setOnNavigationItemSelectedListener{ bottom_navigation_view.setOnNavigationItemSelectedListener{ if (selectFragment(it.itemId,it)) { if (selectFragment(it.itemId,it)) { disableCategoryIfOpenSource() disableCategoryIfOpenSource() Loading @@ -102,6 +115,28 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } setupLangReceiver() setupLangReceiver() applicationManagerServiceConnection.bindService(this) applicationManagerServiceConnection.bindService(this) getAccentColor(); bottom_navigation_view_color() } private fun bottom_navigation_view_color() { val iconsColorStates = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)), intArrayOf( Color.parseColor("#C4CFD9"), accentColorOS )) val textColorStates = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)), intArrayOf( Color.parseColor("#C4CFD9"), accentColorOS )) bottom_navigation_view.setItemIconTintList(iconsColorStates) bottom_navigation_view.setItemTextColor(textColorStates) } } private fun initialiseUpdatesWorker() { private fun initialiseUpdatesWorker() { Loading @@ -116,9 +151,9 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } private fun initialiseFragments(applicationManager: ApplicationManager) { private fun initialiseFragments(applicationManager: ApplicationManager) { homeFragment.initialise(applicationManager) homeFragment.initialise(applicationManager, accentColorOS) searchFragment.initialise(applicationManager) searchFragment.initialise(applicationManager, accentColorOS) updatesFragment.initialise(applicationManager) updatesFragment.initialise(applicationManager, accentColorOS) } } override fun onNavigationItemSelected(item: MenuItem): Boolean { override fun onNavigationItemSelected(item: MenuItem): Boolean { Loading @@ -144,17 +179,28 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS return "any" return "any" } } fun tintMenuIcon(context: Context, item: MenuItem, @ColorRes color: Int) { val normalDrawable = item.icon val wrapDrawable = DrawableCompat.wrap(normalDrawable) DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(context, color))//context.resources.getColor(color)) item.icon = wrapDrawable } private fun selectFragment(fragmentId: Int, item: MenuItem?): Boolean { private fun selectFragment(fragmentId: Int, item: MenuItem?): Boolean { when (fragmentId) { when (fragmentId) { R.id.menu_home -> { R.id.menu_home -> { item?.setIcon(R.drawable.ic_menu_home) item?.setIcon(R.drawable.ic_menu_home) showFragment(homeFragment) showFragment(homeFragment) return true return true } } R.id.menu_categories -> { R.id.menu_categories -> { item?.setIcon(R.drawable.ic_menu_categories) item?.setIcon(R.drawable.ic_menu_categories) showFragment(CategoriesFragment()) showFragment(CategoriesFragment()) return true return true } } R.id.menu_search -> { R.id.menu_search -> { Loading Loading @@ -265,4 +311,20 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } }, 2000) }, 2000) } } /* * get Accent color from OS * * */ private fun getAccentColor() { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data accentColorOS=color; } } } app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt +22 −1 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.text.SpannableStringBuilder import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan import android.util.DisplayMetrics import android.util.DisplayMetrics import android.util.Log import android.util.TypedValue import android.util.TypedValue import android.view.Menu import android.view.Menu import android.view.MenuItem import android.view.MenuItem Loading @@ -39,8 +40,10 @@ import android.view.View import android.widget.ImageView import android.widget.ImageView import android.widget.LinearLayout import android.widget.LinearLayout import android.widget.TextView import android.widget.TextView import androidx.annotation.ColorInt import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar import foundation.e.apps.MainActivity.Companion.sharedPreferences import foundation.e.apps.MainActivity.Companion.sharedPreferences Loading Loading @@ -90,7 +93,7 @@ class ApplicationActivity : private var imageMargin = 0 private var imageMargin = 0 private var defaultElevation = 0f private var defaultElevation = 0f private val sharedPrefFile = "kotlinsharedpreference" private val sharedPrefFile = "kotlinsharedpreference" var accentColorOS = 0 override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate(savedInstanceState) Loading @@ -113,6 +116,14 @@ class ApplicationActivity : this.applicationPackageName = applicationPackageName!! this.applicationPackageName = applicationPackageName!! applicationManagerServiceConnection.bindService(this) applicationManagerServiceConnection.bindService(this) } } getAccentColor() app_install.setTextColor(Color.parseColor("#ffffff")) app_install.setBackgroundColor(accentColorOS) app_category.setTextColor(accentColorOS) app_expand_description.setTextColor(accentColorOS) } } Loading Loading @@ -749,4 +760,14 @@ class ApplicationActivity : applicationManagerServiceConnection.unbindService(this) applicationManagerServiceConnection.unbindService(this) } } } } private fun getAccentColor() { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data accentColorOS=color; } } } app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt +76 −50 Original line number Original line Diff line number Diff line Loading @@ -48,7 +48,7 @@ import kotlinx.android.synthetic.main.install_button_layout.view.* import java.lang.Exception import java.lang.Exception class ApplicationViewHolder(private val activity: Activity, private val view: View) : class ApplicationViewHolder(private val activity: Activity, private val view: View, accentColorOS: Int) : RecyclerView.ViewHolder(view), RecyclerView.ViewHolder(view), ApplicationStateListener, ApplicationStateListener, Downloader.DownloadProgressCallback, Downloader.DownloadProgressCallback, Loading @@ -67,7 +67,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi private var application: Application? = null private var application: Application? = null private val applicationViewModel = ApplicationViewModel() private val applicationViewModel = ApplicationViewModel() private var downloader: Downloader? = null private var downloader: Downloader? = null var accentColorOS=accentColorOS; init { init { pwa_icon.visibility = View.GONE pwa_icon.visibility = View.GONE view.setOnClickListener { view.setOnClickListener { Loading @@ -76,6 +76,12 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi applicationViewModel.onApplicationClick(view.context, application!!) applicationViewModel.onApplicationClick(view.context, application!!) } } } } installButton.setTextColor(Color.parseColor("#ffffff")) if(0!=this.accentColorOS){ installButton.setBackgroundColor(this.accentColorOS) } installButton?.setOnClickListener { installButton?.setOnClickListener { if (application?.fullData != null && if (application?.fullData != null && application!!.fullData!!.getLastVersion() == null) { application!!.fullData!!.getLastVersion() == null) { Loading @@ -87,8 +93,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi } else if (application?.searchAppsBasicData != null && application?.searchAppsBasicData!!.is_pwa) { } else if (application?.searchAppsBasicData != null && application?.searchAppsBasicData!!.is_pwa) { application?.pwaInstall(activity) application?.pwaInstall(activity) } } else { else { application?.buttonClicked(activity, activity) application?.buttonClicked(activity, activity) } } } } Loading Loading @@ -147,13 +152,20 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi override fun stateChanged(state: State) { override fun stateChanged(state: State) { Execute({}, { Execute({}, { installButton.setBackgroundResource(R.drawable.app_install_border_simple) // installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton?.text = activity.getString(state.installButtonTextId) installButton?.text = activity.getString(state.installButtonTextId) when (state) { when (state) { State.NOT_DOWNLOADED -> { State.NOT_DOWNLOADED -> { if(0!=this.accentColorOS){ installButton.setTextColor(this.accentColorOS) } else{ installButton.setTextColor(Color.parseColor("#0088ED")) installButton.setTextColor(Color.parseColor("#0088ED")) } installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.isEnabled = true installButton.isEnabled = true } } Loading @@ -162,15 +174,27 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi installButton?.isEnabled = installButton?.isEnabled = Common.appHasLaunchActivity(activity, application!!.packageName) Common.appHasLaunchActivity(activity, application!!.packageName) installButton.setTextColor(Color.parseColor("#FAFAFA")) if(0!=this.accentColorOS){ installButton!!.setBackgroundColor(this.accentColorOS) } else{ installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton!!.setBackgroundResource(R.drawable.app_install_border) } } installButton.setTextColor(Color.parseColor("#FAFAFA")) } State.INSTALLING -> { State.INSTALLING -> { installButton?.isEnabled = false installButton?.isEnabled = false } } State.NOT_UPDATED -> { State.NOT_UPDATED -> { installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) //installButton!!.setBackgroundResource(R.drawable.app_install_border) if(0!=this.accentColorOS){ installButton!!.setBackgroundColor(this.accentColorOS) } else{ installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton!!.setBackgroundResource(R.drawable.app_install_border) } installButton?.isEnabled = true installButton?.isEnabled = true } } else -> { else -> { Loading @@ -178,6 +202,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi installButton?.isEnabled = true installButton?.isEnabled = true } } } } }) }) } } Loading @@ -204,4 +229,5 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi downloader?.removeListener(this) downloader?.removeListener(this) downloader = null downloader = null } } } } app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt +16 −5 Original line number Original line Diff line number Diff line Loading @@ -53,6 +53,7 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie BasicData.IconLoaderCallback, BasicData.IconLoaderCallback, PwasBasicData.IconLoaderCallback{ PwasBasicData.IconLoaderCallback{ private val icon: ImageView = view.app_icon private val icon: ImageView = view.app_icon private val title: TextView = view.app_title private val title: TextView = view.app_title private val installButton: Button = view.app_install private val installButton: Button = view.app_install Loading @@ -67,6 +68,7 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie applicationViewModel.onApplicationClick(view.context, application!!) applicationViewModel.onApplicationClick(view.context, application!!) } } } } installButton.setOnClickListener { installButton.setOnClickListener { if (application?.fullData != null && if (application?.fullData != null && application!!.fullData!!.getLastVersion() == null) { application!!.fullData!!.getLastVersion() == null) { Loading @@ -82,7 +84,6 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie } } } } } } fun createApplicationView(app: Application) { fun createApplicationView(app: Application) { if(app.basicData!=null) { if(app.basicData!=null) { this.application?.removeListener(this) this.application?.removeListener(this) Loading Loading @@ -116,11 +117,14 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie installButton.text = activity.getString(state.installButtonTextId) installButton.text = activity.getString(state.installButtonTextId) installButton.clearAnimation() installButton.clearAnimation() installButton.clearFocus(); installButton.clearFocus(); var color = application?.getAccentColor(activity); when (state) { when (state) { State.NOT_DOWNLOADED ->{ State.NOT_DOWNLOADED ->{ installButton.setTextColor(Color.parseColor("#0088ED")) installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.setBackgroundResource(R.drawable.app_install_border_simple) if (color != null) { installButton.setTextColor(color) }; installButton.isEnabled = true installButton.isEnabled = true } } Loading @@ -128,7 +132,10 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie installButton.isEnabled = installButton.isEnabled = Common.appHasLaunchActivity(activity, application!!.packageName) Common.appHasLaunchActivity(activity, application!!.packageName) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton!!.setBackgroundResource(R.drawable.app_install_border) if (color != null) { //installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton.setBackgroundColor(color) }; } } State.INSTALLING -> { State.INSTALLING -> { installButton.isEnabled = false installButton.isEnabled = false Loading @@ -137,7 +144,11 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie } } State.NOT_UPDATED -> { State.NOT_UPDATED -> { installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton!!.setBackgroundResource(R.drawable.app_install_border) // installButton!!.setBackgroundResource(R.drawable.app_install_border) if (color != null) { //installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton.setBackgroundColor(color) }; installButton.isEnabled = true installButton.isEnabled = true } } else -> { else -> { Loading app/src/main/java/foundation/e/apps/application/model/Application.kt +44 −34 Original line number Original line Diff line number Diff line Loading @@ -18,11 +18,16 @@ package foundation.e.apps.application.model package foundation.e.apps.application.model import android.Manifest import android.Manifest import android.R import android.app.Activity import android.app.Activity import android.app.DownloadManager import android.app.DownloadManager import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.content.pm.PackageManager import android.content.pm.PackageManager import android.util.Log import android.util.TypedValue import androidx.annotation.ColorInt import androidx.appcompat.view.ContextThemeWrapper import foundation.e.apps.MainActivity.Companion.mActivity import foundation.e.apps.MainActivity.Companion.mActivity import foundation.e.apps.pwa.PwaInstaller import foundation.e.apps.pwa.PwaInstaller import foundation.e.apps.XAPK.XAPKFile import foundation.e.apps.XAPK.XAPKFile Loading @@ -40,8 +45,6 @@ class Application(val packageName: String, private val applicationManager: Appli DownloaderInterface, InstallerInterface { DownloaderInterface, InstallerInterface { private val uses = AtomicInteger(0) private val uses = AtomicInteger(0) private val info = ApplicationInfo(packageName) private val info = ApplicationInfo(packageName) private val stateManager = StateManager(info, this, applicationManager) private val stateManager = StateManager(info, this, applicationManager) Loading Loading @@ -79,16 +82,13 @@ class Application(val packageName: String, private val applicationManager: Appli fun checkForStateUpdate(context: Context) { fun checkForStateUpdate(context: Context) { if (basicData != null) { if (basicData != null) { stateManager.find(context, basicData!!) stateManager.find(context, basicData!!) } } else if (searchAppsBasicData != null) { else if(searchAppsBasicData !=null){ if (searchAppsBasicData!!.is_pwa) { if (searchAppsBasicData!!.is_pwa) { // stateManager.pwaFind() // stateManager.pwaFind() } } else { else{ stateManager.searchAppsFind(context, searchAppsBasicData!!) stateManager.searchAppsFind(context, searchAppsBasicData!!) } } } } else if (pwabasicdata != null) { else if(pwabasicdata!=null){ // stateManager.pwaFind() // stateManager.pwaFind() } } } } Loading Loading @@ -234,8 +234,7 @@ class Application(val packageName: String, private val applicationManager: Appli if (basicData != null) { if (basicData != null) { info.getApkFile(context, basicData!!).delete() info.getApkFile(context, basicData!!).delete() applicationManager.stopInstalling(context, this) applicationManager.stopInstalling(context, this) } } else { else{ applicationManager.stopInstalling(context, this) applicationManager.stopInstalling(context, this) } } } } Loading Loading @@ -276,16 +275,12 @@ class Application(val packageName: String, private val applicationManager: Appli fun assertFullData(context: Context): Error? { fun assertFullData(context: Context): Error? { if (fullData != null) { if (fullData != null) { return null return null } } else if (pwabasicdata != null) { else if(pwabasicdata != null){ return findPwaFullData(context) return findPwaFullData(context) } } else if (searchAppsBasicData != null) { else if(searchAppsBasicData!=null){ if (searchAppsBasicData!!.is_pwa) { if (searchAppsBasicData!!.is_pwa) { return findSearchResultPwaFulldata(context) return findSearchResultPwaFulldata(context) } } else { else{ findSearchAppsFullData(context) findSearchAppsFullData(context) } } } } Loading Loading @@ -343,6 +338,7 @@ class Application(val packageName: String, private val applicationManager: Appli } } return error return error } } private fun findSearchAppsFullData(context: Context): Error? { private fun findSearchAppsFullData(context: Context): Error? { if (searchAppsBasicData == null) { if (searchAppsBasicData == null) { val error = findBasicData(context) val error = findBasicData(context) Loading Loading @@ -432,7 +428,6 @@ class Application(val packageName: String, private val applicationManager: Appli } } fun loadIcon(iconLoaderCallback: BasicData.IconLoaderCallback) { fun loadIcon(iconLoaderCallback: BasicData.IconLoaderCallback) { basicData?.loadIconAsync(this, iconLoaderCallback) basicData?.loadIconAsync(this, iconLoaderCallback) } } Loading Loading @@ -478,4 +473,19 @@ class Application(val packageName: String, private val applicationManager: Appli Pwaupdate(pwaFullData.pwabasicdata, context) Pwaupdate(pwaFullData.pwabasicdata, context) pwaFullData.pwabasicdata = pwabasicdata!! pwaFullData.pwabasicdata = pwabasicdata!! } } /* * get Accent color from OS * */ fun getAccentColor(context: Context): Int { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(context, R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data return color; } } } Loading
app/src/main/java/foundation/e/apps/MainActivity.kt +66 −4 Original line number Original line Diff line number Diff line Loading @@ -19,15 +19,24 @@ package foundation.e.apps //import androidx.fragment.app.ListFragment //import androidx.fragment.app.ListFragment import android.annotation.SuppressLint import android.annotation.SuppressLint import android.content.* import android.content.* import android.content.pm.PackageManager import android.content.pm.PackageManager import android.content.res.ColorStateList import android.graphics.Color import android.os.Bundle import android.os.Bundle import android.os.Handler import android.os.Handler import android.preference.PreferenceManager import android.preference.PreferenceManager import android.util.TypedValue import android.view.MenuItem import android.view.MenuItem import android.widget.Toast import android.widget.Toast import androidx.annotation.ColorInt import androidx.annotation.ColorRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ContextThemeWrapper import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.DrawableCompat import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationItemView import com.google.android.material.bottomnavigation.BottomNavigationItemView import com.google.android.material.bottomnavigation.BottomNavigationMenuView import com.google.android.material.bottomnavigation.BottomNavigationMenuView Loading Loading @@ -60,7 +69,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS private val codeRequestPermissions = 9527 private val codeRequestPermissions = 9527 var doubleBackToExitPressedOnce = false; var doubleBackToExitPressedOnce = false; private var isReceiverRegistered = false private var isReceiverRegistered = false var accentColorOS = 0 companion object { companion object { Loading @@ -70,12 +79,16 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate(savedInstanceState) //ThemeColors(this); setContentView(R.layout.activity_main) setContentView(R.layout.activity_main) mActivity = this mActivity = this disableCategoryIfOpenSource() disableCategoryIfOpenSource() bottom_navigation_view.setOnNavigationItemSelectedListener{ bottom_navigation_view.setOnNavigationItemSelectedListener{ if (selectFragment(it.itemId,it)) { if (selectFragment(it.itemId,it)) { disableCategoryIfOpenSource() disableCategoryIfOpenSource() Loading @@ -102,6 +115,28 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } setupLangReceiver() setupLangReceiver() applicationManagerServiceConnection.bindService(this) applicationManagerServiceConnection.bindService(this) getAccentColor(); bottom_navigation_view_color() } private fun bottom_navigation_view_color() { val iconsColorStates = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)), intArrayOf( Color.parseColor("#C4CFD9"), accentColorOS )) val textColorStates = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_checked), intArrayOf(android.R.attr.state_checked)), intArrayOf( Color.parseColor("#C4CFD9"), accentColorOS )) bottom_navigation_view.setItemIconTintList(iconsColorStates) bottom_navigation_view.setItemTextColor(textColorStates) } } private fun initialiseUpdatesWorker() { private fun initialiseUpdatesWorker() { Loading @@ -116,9 +151,9 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } private fun initialiseFragments(applicationManager: ApplicationManager) { private fun initialiseFragments(applicationManager: ApplicationManager) { homeFragment.initialise(applicationManager) homeFragment.initialise(applicationManager, accentColorOS) searchFragment.initialise(applicationManager) searchFragment.initialise(applicationManager, accentColorOS) updatesFragment.initialise(applicationManager) updatesFragment.initialise(applicationManager, accentColorOS) } } override fun onNavigationItemSelected(item: MenuItem): Boolean { override fun onNavigationItemSelected(item: MenuItem): Boolean { Loading @@ -144,17 +179,28 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS return "any" return "any" } } fun tintMenuIcon(context: Context, item: MenuItem, @ColorRes color: Int) { val normalDrawable = item.icon val wrapDrawable = DrawableCompat.wrap(normalDrawable) DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(context, color))//context.resources.getColor(color)) item.icon = wrapDrawable } private fun selectFragment(fragmentId: Int, item: MenuItem?): Boolean { private fun selectFragment(fragmentId: Int, item: MenuItem?): Boolean { when (fragmentId) { when (fragmentId) { R.id.menu_home -> { R.id.menu_home -> { item?.setIcon(R.drawable.ic_menu_home) item?.setIcon(R.drawable.ic_menu_home) showFragment(homeFragment) showFragment(homeFragment) return true return true } } R.id.menu_categories -> { R.id.menu_categories -> { item?.setIcon(R.drawable.ic_menu_categories) item?.setIcon(R.drawable.ic_menu_categories) showFragment(CategoriesFragment()) showFragment(CategoriesFragment()) return true return true } } R.id.menu_search -> { R.id.menu_search -> { Loading Loading @@ -265,4 +311,20 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } }, 2000) }, 2000) } } /* * get Accent color from OS * * */ private fun getAccentColor() { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data accentColorOS=color; } } }
app/src/main/java/foundation/e/apps/application/ApplicationActivity.kt +22 −1 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.text.SpannableStringBuilder import android.text.method.LinkMovementMethod import android.text.method.LinkMovementMethod import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan import android.util.DisplayMetrics import android.util.DisplayMetrics import android.util.Log import android.util.TypedValue import android.util.TypedValue import android.view.Menu import android.view.Menu import android.view.MenuItem import android.view.MenuItem Loading @@ -39,8 +40,10 @@ import android.view.View import android.widget.ImageView import android.widget.ImageView import android.widget.LinearLayout import android.widget.LinearLayout import android.widget.TextView import android.widget.TextView import androidx.annotation.ColorInt import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ContextThemeWrapper import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar import foundation.e.apps.MainActivity.Companion.sharedPreferences import foundation.e.apps.MainActivity.Companion.sharedPreferences Loading Loading @@ -90,7 +93,7 @@ class ApplicationActivity : private var imageMargin = 0 private var imageMargin = 0 private var defaultElevation = 0f private var defaultElevation = 0f private val sharedPrefFile = "kotlinsharedpreference" private val sharedPrefFile = "kotlinsharedpreference" var accentColorOS = 0 override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate(savedInstanceState) Loading @@ -113,6 +116,14 @@ class ApplicationActivity : this.applicationPackageName = applicationPackageName!! this.applicationPackageName = applicationPackageName!! applicationManagerServiceConnection.bindService(this) applicationManagerServiceConnection.bindService(this) } } getAccentColor() app_install.setTextColor(Color.parseColor("#ffffff")) app_install.setBackgroundColor(accentColorOS) app_category.setTextColor(accentColorOS) app_expand_description.setTextColor(accentColorOS) } } Loading Loading @@ -749,4 +760,14 @@ class ApplicationActivity : applicationManagerServiceConnection.unbindService(this) applicationManagerServiceConnection.unbindService(this) } } } } private fun getAccentColor() { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(this, android.R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data accentColorOS=color; } } }
app/src/main/java/foundation/e/apps/application/ApplicationViewHolder.kt +76 −50 Original line number Original line Diff line number Diff line Loading @@ -48,7 +48,7 @@ import kotlinx.android.synthetic.main.install_button_layout.view.* import java.lang.Exception import java.lang.Exception class ApplicationViewHolder(private val activity: Activity, private val view: View) : class ApplicationViewHolder(private val activity: Activity, private val view: View, accentColorOS: Int) : RecyclerView.ViewHolder(view), RecyclerView.ViewHolder(view), ApplicationStateListener, ApplicationStateListener, Downloader.DownloadProgressCallback, Downloader.DownloadProgressCallback, Loading @@ -67,7 +67,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi private var application: Application? = null private var application: Application? = null private val applicationViewModel = ApplicationViewModel() private val applicationViewModel = ApplicationViewModel() private var downloader: Downloader? = null private var downloader: Downloader? = null var accentColorOS=accentColorOS; init { init { pwa_icon.visibility = View.GONE pwa_icon.visibility = View.GONE view.setOnClickListener { view.setOnClickListener { Loading @@ -76,6 +76,12 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi applicationViewModel.onApplicationClick(view.context, application!!) applicationViewModel.onApplicationClick(view.context, application!!) } } } } installButton.setTextColor(Color.parseColor("#ffffff")) if(0!=this.accentColorOS){ installButton.setBackgroundColor(this.accentColorOS) } installButton?.setOnClickListener { installButton?.setOnClickListener { if (application?.fullData != null && if (application?.fullData != null && application!!.fullData!!.getLastVersion() == null) { application!!.fullData!!.getLastVersion() == null) { Loading @@ -87,8 +93,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi } else if (application?.searchAppsBasicData != null && application?.searchAppsBasicData!!.is_pwa) { } else if (application?.searchAppsBasicData != null && application?.searchAppsBasicData!!.is_pwa) { application?.pwaInstall(activity) application?.pwaInstall(activity) } } else { else { application?.buttonClicked(activity, activity) application?.buttonClicked(activity, activity) } } } } Loading Loading @@ -147,13 +152,20 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi override fun stateChanged(state: State) { override fun stateChanged(state: State) { Execute({}, { Execute({}, { installButton.setBackgroundResource(R.drawable.app_install_border_simple) // installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton?.text = activity.getString(state.installButtonTextId) installButton?.text = activity.getString(state.installButtonTextId) when (state) { when (state) { State.NOT_DOWNLOADED -> { State.NOT_DOWNLOADED -> { if(0!=this.accentColorOS){ installButton.setTextColor(this.accentColorOS) } else{ installButton.setTextColor(Color.parseColor("#0088ED")) installButton.setTextColor(Color.parseColor("#0088ED")) } installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.isEnabled = true installButton.isEnabled = true } } Loading @@ -162,15 +174,27 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi installButton?.isEnabled = installButton?.isEnabled = Common.appHasLaunchActivity(activity, application!!.packageName) Common.appHasLaunchActivity(activity, application!!.packageName) installButton.setTextColor(Color.parseColor("#FAFAFA")) if(0!=this.accentColorOS){ installButton!!.setBackgroundColor(this.accentColorOS) } else{ installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton!!.setBackgroundResource(R.drawable.app_install_border) } } installButton.setTextColor(Color.parseColor("#FAFAFA")) } State.INSTALLING -> { State.INSTALLING -> { installButton?.isEnabled = false installButton?.isEnabled = false } } State.NOT_UPDATED -> { State.NOT_UPDATED -> { installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) //installButton!!.setBackgroundResource(R.drawable.app_install_border) if(0!=this.accentColorOS){ installButton!!.setBackgroundColor(this.accentColorOS) } else{ installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton!!.setBackgroundResource(R.drawable.app_install_border) } installButton?.isEnabled = true installButton?.isEnabled = true } } else -> { else -> { Loading @@ -178,6 +202,7 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi installButton?.isEnabled = true installButton?.isEnabled = true } } } } }) }) } } Loading @@ -204,4 +229,5 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi downloader?.removeListener(this) downloader?.removeListener(this) downloader = null downloader = null } } } }
app/src/main/java/foundation/e/apps/application/SmallApplicationViewHolder.kt +16 −5 Original line number Original line Diff line number Diff line Loading @@ -53,6 +53,7 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie BasicData.IconLoaderCallback, BasicData.IconLoaderCallback, PwasBasicData.IconLoaderCallback{ PwasBasicData.IconLoaderCallback{ private val icon: ImageView = view.app_icon private val icon: ImageView = view.app_icon private val title: TextView = view.app_title private val title: TextView = view.app_title private val installButton: Button = view.app_install private val installButton: Button = view.app_install Loading @@ -67,6 +68,7 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie applicationViewModel.onApplicationClick(view.context, application!!) applicationViewModel.onApplicationClick(view.context, application!!) } } } } installButton.setOnClickListener { installButton.setOnClickListener { if (application?.fullData != null && if (application?.fullData != null && application!!.fullData!!.getLastVersion() == null) { application!!.fullData!!.getLastVersion() == null) { Loading @@ -82,7 +84,6 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie } } } } } } fun createApplicationView(app: Application) { fun createApplicationView(app: Application) { if(app.basicData!=null) { if(app.basicData!=null) { this.application?.removeListener(this) this.application?.removeListener(this) Loading Loading @@ -116,11 +117,14 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie installButton.text = activity.getString(state.installButtonTextId) installButton.text = activity.getString(state.installButtonTextId) installButton.clearAnimation() installButton.clearAnimation() installButton.clearFocus(); installButton.clearFocus(); var color = application?.getAccentColor(activity); when (state) { when (state) { State.NOT_DOWNLOADED ->{ State.NOT_DOWNLOADED ->{ installButton.setTextColor(Color.parseColor("#0088ED")) installButton.setBackgroundResource(R.drawable.app_install_border_simple) installButton.setBackgroundResource(R.drawable.app_install_border_simple) if (color != null) { installButton.setTextColor(color) }; installButton.isEnabled = true installButton.isEnabled = true } } Loading @@ -128,7 +132,10 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie installButton.isEnabled = installButton.isEnabled = Common.appHasLaunchActivity(activity, application!!.packageName) Common.appHasLaunchActivity(activity, application!!.packageName) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton!!.setBackgroundResource(R.drawable.app_install_border) if (color != null) { //installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton.setBackgroundColor(color) }; } } State.INSTALLING -> { State.INSTALLING -> { installButton.isEnabled = false installButton.isEnabled = false Loading @@ -137,7 +144,11 @@ class SmallApplicationViewHolder(private val activity: Activity, private val vie } } State.NOT_UPDATED -> { State.NOT_UPDATED -> { installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton.setTextColor(Color.parseColor("#FAFAFA")) installButton!!.setBackgroundResource(R.drawable.app_install_border) // installButton!!.setBackgroundResource(R.drawable.app_install_border) if (color != null) { //installButton!!.setBackgroundResource(R.drawable.app_install_border) installButton.setBackgroundColor(color) }; installButton.isEnabled = true installButton.isEnabled = true } } else -> { else -> { Loading
app/src/main/java/foundation/e/apps/application/model/Application.kt +44 −34 Original line number Original line Diff line number Diff line Loading @@ -18,11 +18,16 @@ package foundation.e.apps.application.model package foundation.e.apps.application.model import android.Manifest import android.Manifest import android.R import android.app.Activity import android.app.Activity import android.app.DownloadManager import android.app.DownloadManager import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.content.pm.PackageManager import android.content.pm.PackageManager import android.util.Log import android.util.TypedValue import androidx.annotation.ColorInt import androidx.appcompat.view.ContextThemeWrapper import foundation.e.apps.MainActivity.Companion.mActivity import foundation.e.apps.MainActivity.Companion.mActivity import foundation.e.apps.pwa.PwaInstaller import foundation.e.apps.pwa.PwaInstaller import foundation.e.apps.XAPK.XAPKFile import foundation.e.apps.XAPK.XAPKFile Loading @@ -40,8 +45,6 @@ class Application(val packageName: String, private val applicationManager: Appli DownloaderInterface, InstallerInterface { DownloaderInterface, InstallerInterface { private val uses = AtomicInteger(0) private val uses = AtomicInteger(0) private val info = ApplicationInfo(packageName) private val info = ApplicationInfo(packageName) private val stateManager = StateManager(info, this, applicationManager) private val stateManager = StateManager(info, this, applicationManager) Loading Loading @@ -79,16 +82,13 @@ class Application(val packageName: String, private val applicationManager: Appli fun checkForStateUpdate(context: Context) { fun checkForStateUpdate(context: Context) { if (basicData != null) { if (basicData != null) { stateManager.find(context, basicData!!) stateManager.find(context, basicData!!) } } else if (searchAppsBasicData != null) { else if(searchAppsBasicData !=null){ if (searchAppsBasicData!!.is_pwa) { if (searchAppsBasicData!!.is_pwa) { // stateManager.pwaFind() // stateManager.pwaFind() } } else { else{ stateManager.searchAppsFind(context, searchAppsBasicData!!) stateManager.searchAppsFind(context, searchAppsBasicData!!) } } } } else if (pwabasicdata != null) { else if(pwabasicdata!=null){ // stateManager.pwaFind() // stateManager.pwaFind() } } } } Loading Loading @@ -234,8 +234,7 @@ class Application(val packageName: String, private val applicationManager: Appli if (basicData != null) { if (basicData != null) { info.getApkFile(context, basicData!!).delete() info.getApkFile(context, basicData!!).delete() applicationManager.stopInstalling(context, this) applicationManager.stopInstalling(context, this) } } else { else{ applicationManager.stopInstalling(context, this) applicationManager.stopInstalling(context, this) } } } } Loading Loading @@ -276,16 +275,12 @@ class Application(val packageName: String, private val applicationManager: Appli fun assertFullData(context: Context): Error? { fun assertFullData(context: Context): Error? { if (fullData != null) { if (fullData != null) { return null return null } } else if (pwabasicdata != null) { else if(pwabasicdata != null){ return findPwaFullData(context) return findPwaFullData(context) } } else if (searchAppsBasicData != null) { else if(searchAppsBasicData!=null){ if (searchAppsBasicData!!.is_pwa) { if (searchAppsBasicData!!.is_pwa) { return findSearchResultPwaFulldata(context) return findSearchResultPwaFulldata(context) } } else { else{ findSearchAppsFullData(context) findSearchAppsFullData(context) } } } } Loading Loading @@ -343,6 +338,7 @@ class Application(val packageName: String, private val applicationManager: Appli } } return error return error } } private fun findSearchAppsFullData(context: Context): Error? { private fun findSearchAppsFullData(context: Context): Error? { if (searchAppsBasicData == null) { if (searchAppsBasicData == null) { val error = findBasicData(context) val error = findBasicData(context) Loading Loading @@ -432,7 +428,6 @@ class Application(val packageName: String, private val applicationManager: Appli } } fun loadIcon(iconLoaderCallback: BasicData.IconLoaderCallback) { fun loadIcon(iconLoaderCallback: BasicData.IconLoaderCallback) { basicData?.loadIconAsync(this, iconLoaderCallback) basicData?.loadIconAsync(this, iconLoaderCallback) } } Loading Loading @@ -478,4 +473,19 @@ class Application(val packageName: String, private val applicationManager: Appli Pwaupdate(pwaFullData.pwabasicdata, context) Pwaupdate(pwaFullData.pwabasicdata, context) pwaFullData.pwabasicdata = pwabasicdata!! pwaFullData.pwabasicdata = pwabasicdata!! } } /* * get Accent color from OS * */ fun getAccentColor(context: Context): Int { val typedValue = TypedValue() val contextThemeWrapper = ContextThemeWrapper(context, R.style.Theme_DeviceDefault) contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true) @ColorInt val color = typedValue.data return color; } } }