added ability to use application offline
This commit is contained in:
		@@ -104,6 +104,15 @@ class LoginActivity : AppCompatActivity() {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.offlineButton.setOnClickListener {
 | 
			
		||||
            sharedPreferences.edit().putString("currentGroup", "offline").apply()
 | 
			
		||||
            sharedPreferences.edit().putStringSet("groups", setOf("offline")).apply()
 | 
			
		||||
 | 
			
		||||
            val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
            startActivity(intent)
 | 
			
		||||
            finish()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun fillUpLanguagesSpinner() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.Menu
 | 
			
		||||
import android.view.MenuItem
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.activity.result.contract.ActivityResultContracts
 | 
			
		||||
import androidx.appcompat.app.ActionBarDrawerToggle
 | 
			
		||||
import androidx.appcompat.app.AlertDialog
 | 
			
		||||
@@ -108,8 +109,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
 | 
			
		||||
        }
 | 
			
		||||
        val net = Net()
 | 
			
		||||
        net.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
 | 
			
		||||
        if (!net.serverIsAvailable(this)) {
 | 
			
		||||
        val currentGroup = sharedPreferences.getString("currentGroup", "offline")!!
 | 
			
		||||
        if ( currentGroup != "offline" && !net.serverIsAvailable(this)) {
 | 
			
		||||
            noInternetConnectionAvailableNotification(this)
 | 
			
		||||
        } else {
 | 
			
		||||
            synchronize()
 | 
			
		||||
@@ -393,16 +394,35 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun isOffline(): Boolean {
 | 
			
		||||
        val sharedPreferences = EncryptedSharedPreferences.create(
 | 
			
		||||
            "sensitive",
 | 
			
		||||
            MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
 | 
			
		||||
            applicationContext,
 | 
			
		||||
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
 | 
			
		||||
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
 | 
			
		||||
        )
 | 
			
		||||
        return sharedPreferences.getString("currentGroup", "") == "offline"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onNavigationItemSelected(item: MenuItem): Boolean {
 | 
			
		||||
        lateinit var intent: Intent
 | 
			
		||||
        when (item.itemId) {
 | 
			
		||||
            R.id.nav_account -> {
 | 
			
		||||
                if (isOffline()) {
 | 
			
		||||
                    Toast.makeText(this, getString(R.string.online_only_feature), Toast.LENGTH_SHORT).show()
 | 
			
		||||
                    return false
 | 
			
		||||
                }
 | 
			
		||||
                intent = Intent(this, AccountSettingsActivity::class.java)
 | 
			
		||||
                settingsActivityLauncher.launch(intent)
 | 
			
		||||
                return true
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            R.id.nav_groups -> {
 | 
			
		||||
                if (isOffline()) {
 | 
			
		||||
                    Toast.makeText(this, getString(R.string.online_only_feature), Toast.LENGTH_SHORT).show()
 | 
			
		||||
                    return false
 | 
			
		||||
                }
 | 
			
		||||
                intent = Intent(this, MyGroupsActivity::class.java)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,18 +24,22 @@ class NavigatorActivity : Activity() {
 | 
			
		||||
 | 
			
		||||
        var intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
 | 
			
		||||
        if (!isInGroup()) {
 | 
			
		||||
        if (!isInGroup() && !isOffline()) {
 | 
			
		||||
            intent = Intent(this, GroupActivity::class.java)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!isAuthenticated()) {
 | 
			
		||||
        if (!isAuthenticated() && !isOffline()) {
 | 
			
		||||
            intent = Intent(this, LoginActivity::class.java);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        startActivity(intent);
 | 
			
		||||
        finish();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun isOffline(): Boolean {
 | 
			
		||||
        return sharedPreferences.getString("currentGroup", "")!! == "offline"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun isAuthenticated(): Boolean {
 | 
			
		||||
        return sharedPreferences.getString("token", "") != ""
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -37,17 +37,23 @@ class SettingsActivity : AppCompatActivity() {
 | 
			
		||||
        net.language = sharedPreferences.getString("language", "")!!
 | 
			
		||||
        net.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
 | 
			
		||||
        groupsNames = mutableListOf()
 | 
			
		||||
 | 
			
		||||
        for (myGroup in myGroups) {
 | 
			
		||||
            groupsNames.add(net.getGroupName(myGroup.toInt()))
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding = ActivitySettingsBinding.inflate(layoutInflater)
 | 
			
		||||
        setContentView(binding.root)
 | 
			
		||||
 | 
			
		||||
        setUpImageCompressionSeekBar()
 | 
			
		||||
        fillUpCurrentGroupSpinner()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (isOffline()) {
 | 
			
		||||
            binding.currentGroupSetting.visibility = View.GONE
 | 
			
		||||
        } else {
 | 
			
		||||
            groupsNames = mutableListOf()
 | 
			
		||||
 | 
			
		||||
            for (myGroup in myGroups) {
 | 
			
		||||
                groupsNames.add(net.getGroupName(myGroup.toInt()))
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            fillUpCurrentGroupSpinner()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.saveButton.setOnClickListener {
 | 
			
		||||
            sharedPreferences.edit().putString("currentGroup", net.getGroupId(binding.currentGroupSpinner.selectedItem.toString())).apply()
 | 
			
		||||
@@ -62,14 +68,16 @@ class SettingsActivity : AppCompatActivity() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun isOffline(): Boolean {
 | 
			
		||||
        return sharedPreferences.getString("currentGroup", "offline") == "offline"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setUpImageCompressionSeekBar() {
 | 
			
		||||
        val compressionFactor = sharedPreferences.getInt("imageCompression", 1)
 | 
			
		||||
        binding.imageCompressionFactorSeekBar.progress = compressionFactor - 1
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun fillUpCurrentGroupSpinner() {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (currentGroup == "offline") {
 | 
			
		||||
            binding.currentGroupSetting.visibility = View.GONE
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -117,6 +117,7 @@
 | 
			
		||||
    <string name="no_internet_connection">No internet connection available. Please, connect to a network.</string>
 | 
			
		||||
    <string name="ok">Ok</string>
 | 
			
		||||
    <string name="logout">Log out</string>
 | 
			
		||||
    <string name="online_only_feature">This feature is online only</string>
 | 
			
		||||
    <string-array name="languages">
 | 
			
		||||
        <item>en-US</item>
 | 
			
		||||
        <item>ru-RU</item>
 | 
			
		||||
 
 | 
			
		||||
@@ -115,6 +115,7 @@
 | 
			
		||||
    <string name="no_internet_connection">No internet connection available. Please, connect to a network.</string>
 | 
			
		||||
    <string name="ok">Ok</string>
 | 
			
		||||
    <string name="logout">Log out</string>
 | 
			
		||||
    <string name="online_only_feature">This feature is online only</string>
 | 
			
		||||
    <string-array name="languages">
 | 
			
		||||
        <item>en-US</item>
 | 
			
		||||
        <item>ru-RU</item>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user