diff --git a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt index db76d4916..a1a9cdd76 100644 --- a/app/src/main/java/io/legado/app/ui/main/MainActivity.kt +++ b/app/src/main/java/io/legado/app/ui/main/MainActivity.kt @@ -1,47 +1,26 @@ package io.legado.app.ui.main -import android.Manifest import android.content.Intent import android.os.Bundle -import android.util.Log import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.ActionBarDrawerToggle import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout -import androidx.lifecycle.ViewModelProvider import com.google.android.material.navigation.NavigationView -import com.jayway.jsonpath.Configuration -import com.jayway.jsonpath.JsonPath -import com.jayway.jsonpath.Option -import io.legado.app.App import io.legado.app.R import io.legado.app.base.BaseActivity -import io.legado.app.constant.AppConst.APP_TAG -import io.legado.app.constant.AppConst.RC_IMPORT_YUEDU_DATA -import io.legado.app.data.entities.ReplaceRule -import io.legado.app.ui.replacerule.ReplaceRuleActivity import io.legado.app.ui.search.SearchActivity -import io.legado.app.utils.getSdPath -import io.legado.app.utils.readBool -import io.legado.app.utils.readInt -import io.legado.app.utils.readString +import io.legado.app.utils.getViewModel import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.* -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.startActivity -import org.jetbrains.anko.uiThread -import pub.devrel.easypermissions.AfterPermissionGranted -import pub.devrel.easypermissions.EasyPermissions -import java.io.File -import java.lang.Exception class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedListener { override val viewModel: MainViewModel - get() = ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(MainViewModel::class.java) + get() = getViewModel(MainViewModel::class.java) + override val layoutID: Int get() = R.layout.activity_main - private val PERMISSONS = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) override fun onViewModelCreated(viewModel: MainViewModel, savedInstanceState: Bundle?) { fab.setOnClickListener { startActivity(Intent(this, SearchActivity::class.java)) } @@ -79,79 +58,27 @@ class MainActivity : BaseActivity(), NavigationV override fun onNavigationItemSelected(item: MenuItem): Boolean { // Handle navigation view item clicks here. when (item.itemId) { - R.id.nav_backup -> { + R.id.nav_home -> { // Handle the camera action } - R.id.nav_import -> { + R.id.nav_gallery -> { } - R.id.nav_import_old -> importYueDu() - R.id.nav_import_github -> { + R.id.nav_slideshow -> { } - R.id.nav_replace_rule -> startActivity() - R.id.nav_send -> { + R.id.nav_tools -> { } - } - val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) - drawerLayout.closeDrawer(GravityCompat.START) - return true - } - - /* - * import from YueDu backup data - * */ - @AfterPermissionGranted(RC_IMPORT_YUEDU_DATA) - fun importYueDu() { - if (!EasyPermissions.hasPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { - EasyPermissions.requestPermissions(this, getString(R.string.perm_request_storage), RC_IMPORT_YUEDU_DATA, Manifest.permission.WRITE_EXTERNAL_STORAGE) - return - } - - val yuedu = File(getSdPath(), "YueDu") - val jsonPath = JsonPath.using(Configuration.builder() - .options(Option.SUPPRESS_EXCEPTIONS) - .build()) + R.id.nav_share -> { - // Replace rules - val rFile = File(yuedu, "myBookReplaceRule.json") - val replaceRules = mutableListOf() - if (rFile.exists()) try { - val items: List> = jsonPath.parse(rFile.readText()).read("$.*") - for (item in items) { - val jsonItem = jsonPath.parse(item) - val rRule = ReplaceRule() - rRule.name = jsonItem.readString("$.replaceSummary") - rRule.pattern = jsonItem.readString("$.regex") - rRule.replacement = jsonItem.readString("$.replacement") - rRule.isRegex = jsonItem.readBool("$.isRegex") - rRule.scope = jsonItem.readString("$.useTo") - rRule.isEnabled = jsonItem.readBool("$.enable") - rRule.order = jsonItem.readInt("$.serialNumber") - replaceRules.add(rRule) - // Log.e(APP_TAG, rRule.toString()) } + R.id.nav_send -> { - doAsync { - App.db.replaceRuleDao().insert(*replaceRules.toTypedArray()) - val count = App.db.replaceRuleDao().all.size - val maxId = App.db.replaceRuleDao().maxOrder - uiThread { - Log.e(APP_TAG, "$count records were inserted to database, and max id is $maxId.") - } } - - } catch (e: Exception) { - Log.e(APP_TAG, e.localizedMessage) } + val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) + drawerLayout.closeDrawer(GravityCompat.START) + return true } - - - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - // Forward results to EasyPermissions - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - } diff --git a/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt index 14994c535..27a8450d8 100644 --- a/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/search/SearchActivity.kt @@ -1,15 +1,15 @@ package io.legado.app.ui.search import android.os.Bundle -import androidx.lifecycle.ViewModelProvider import io.legado.app.R import io.legado.app.base.BaseActivity -import io.legado.app.help.LayoutManager +import io.legado.app.search.SearchDataBinding +import io.legado.app.utils.getViewModel class SearchActivity : BaseActivity() { override val viewModel: SearchViewModel - get() = ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(SearchViewModel::class.java) + get() = getViewModel(SearchViewModel::class.java) override val layoutID: Int get() = R.layout.activity_search diff --git a/app/src/main/java/io/legado/app/utils/ViewModelExtensions.kt b/app/src/main/java/io/legado/app/utils/ViewModelExtensions.kt new file mode 100644 index 000000000..ed963ec8e --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/ViewModelExtensions.kt @@ -0,0 +1,12 @@ +package io.legado.app.utils + +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProviders + +fun AppCompatActivity.getViewModel(clazz: Class) = ViewModelProviders.of(this).get(clazz) + +fun Fragment.getViewModel(clazz: Class) = ViewModelProviders.of(this).get(clazz) + +fun Fragment.getViewModelOfActivity(clazz: Class) = ViewModelProviders.of(requireActivity()).get(clazz)